Skip to main content

Python Data Types

LizAbout 14 minPythonPython

Python Data Types

    1. Data Types
    1. String Operations
    1. List Operations
    1. Tuple Operations
    1. Set Operations
    1. Dictionary Operations

1. Data Types

1.1. Number 数字

1.1.1. Integer 整数(正整数,负整数;十进制,十六进制)

Python允许在数字中间以_分隔,因此,写成10_000_000_000和10000000000是完全一样的。十六进制数也可以写成0xa1b2_c3d4。

注意:Python的整数没有大小限制,而某些语言的整数根据其存储长度是有大小限制的,例如Java对32位整数的范围限制在-2147483648-2147483647。

1.1.2. Float 浮点数(普通表示,科学计数法表示)

用科学计数法表示,把10用e替代,1.23x109就是1.23e9,0.000012可以写成1.2e-5,等等。

注意:Python的浮点数也没有大小限制,但是超出一定范围就直接表示为inf(无限大)。

1.2. String 字符串

1.2.1. 单行内容和多行内容

1.2.1.1. 单行内容
  • 用单引号'或双引号"括起来表示单行内容
  • 单行内容为了美观用反斜杠\换行写,实际还是单行内容
# 用'表示单行内容
>>> greeting = 'Hello, World!'
>>> print(greeting)
Hello, World!
>>> print(len(greeting))
13

# 用"表示单行内容
>>> sentence = "I hope you are enjoying 30 days of Python Challenge"
>>> print(sentence)
I hope you are enjoying 30 days of Python Challenge

# 单行内容为了美观用反斜杠\换行写,实际还是单行内容
>>> sentence1 = "I hope you are\
... enjoying 30 days\
... of Python Challenge."
>>> print(sentence1)
I hope you areenjoying 30 daysof Python Challenge.
1.2.1.2. 多行内容
  • 用三引号('''或""")括起来表示多行内容
  • 单行内容里用\n进行换行
# 用'''表示多行内容
>>> multiline_string = '''I am a teacher and enjoy teaching.
... I didn't find anything as rewarding as empowering people.
... That is why I created 30 days of python.'''
>>> print(multiline_string)
I am a teacher and enjoy teaching.
I didn't find anything as rewarding as empowering people.
That is why I created 30 days of python.

# 用"""表示多行内容
>>> multiline_string = """I am a teacher and enjoy teaching.
... I didn't find anything as rewarding as empowering people.
... That is why I created 30 days of python."""
>>> print(multiline_string)
I am a teacher and enjoy teaching.
I didn't find anything as rewarding as empowering people.
That is why I created 30 days of python.

# 单行内容里用\n进行换行表示多行内容
>>> sentence = "I hope you are\n enjoying 30 days\n of Python Challenge"
>>> print(sentence)
I hope you are
 enjoying 30 days
 of Python Challenge

1.2.2. 转义字符和不转义表示

1.2.2.1. 转义字符 \
\n换行
\t制表符
\斜杠
'单引号
"双引号
1.2.2.2. 不转义表示:在字符串前加r,表示内部的字符串默认不转义
>>> print('\\\t\\')
\       \

>>> print(r'\\\t\\')
\\\t\\

>>> print('''hello,\n
world''')
hello,

world
>>> print(r'''hello,\n
world''')
hello,\n
world

1.3. Boolean 布尔值

只有True、False两种值

首字母要大写

1.4. 空值(None)

首字母要大写

1.5. 组合类型汇总:List&Tuple&Set&Dictionary

表现有序/无序唯一/重复可变/不可变
List方括号 []有序重复可变
Tuple圆括号 ()有序重复不可变
Set花括号 {}无序唯一可变
Dictionary花括号 {}无序唯一可变

1.6. List(有序,允许不同数据类型项)

['Earth', 'Jupiter', 'Neptune', 'Mars', 'Venus', 'Saturn', 'Uranus', 'Mercury']# planets

1.7. Tuple(创建后无法修改,有序,允许不同数据类型项)

('Earth', 'Jupiter', 'Neptune', 'Mars', 'Venus', 'Saturn', 'Uranus', 'Mercury') # planets

1.8. Set(唯一,无序,无索引)

Set is a collection of unordered and un-indexed distinct elements.

{3.14, 9.81, 2.7} # order is not important in set

1.9. Dictionary(key value 对,无序)

a value could be any data types

2. String Operations

2.1. 连接join

方式一:+

方式二:'连接符'.join(序列)

方式三:"hello"3 字符串3=3个字符串连接 'hellohellohello'

# +号连接
full_name = 'Asabeneh' + ' ' + 'Yetayeh'

# join函数连接
name = ('Asabeneh','Yetayeh') # tuple
full_name = ' '.join(name)

web_tech = ['HTML', 'CSS', 'JavaScript', 'React'] # list
result = ' '.join(web_tech)
print(result) # 'HTML CSS JavaScript React'
result1 = '# '.join(web_tech)
print(result1) # 'HTML# CSS# JavaScript# React'

# *号
>>> "hello"*3		#字符串*3=3个字符串连接
'hellohellohello'

2.2. 拆分split

  • string.split():默认空格作为分隔符
  • string.split('分隔符')
challenge = 'thirty days of python'
print(challenge.split()) # ['thirty', 'days', 'of', 'python']
challenge = 'thirty, days, of, python'
print(challenge.split(', ')) # ['thirty', 'days', 'of', 'python']

2.3. 格式化f-Strings

  • f-Strings
a = 4
b = 3
print(f'{a} + {b} = {a +b}')
print(f'{a} - {b} = {a - b}')
print(f'{a} * {b} = {a * b}')
print(f'{a} / {b} = {a / b:.2f}')
print(f'{a} % {b} = {a % b}')
print(f'{a} // {b} = {a // b}')
print(f'{a} ** {b} = {a ** b}')

2.4. String转字符

方式一:unpack

language = 'Python'
a,b,c,d,e,f = language # unpacking sequence characters into variables
print(a) # P
print(b) # y
print(c) # t
print(d) # h
print(e) # o
print(f) # n

方式二:index 正索引:从左到右 (0,1,2,3) 负索引:从右到左(-1,-2,-3,-4)

# 正索引
language = 'Python'
first_letter = language[0]
print(first_letter) # P
second_letter = language[1]
print(second_letter) # y
last_index = len(language) - 1
last_letter = language[last_index]
print(last_letter) # n

# 负索引
language = 'Python'
last_letter = language[-1]
print(last_letter) # n
second_last = language[-2]
print(second_last) # o

2.5. 子串slice

切片 slice

  • 无步长
  • 有步长
# 无步长
language = 'Python'
first_three = language[0:3] # starts at zero index and up to 3 but not include 3
print(first_three) #Pyt
last_three = language[3:6]
print(last_three) # hon
# Another way
last_three = language[-3:]
print(last_three)   # hon
last_three = language[3:]
print(last_three)   # hon

# 有步长
language = 'Python'
pto = language[0:6:2] #
print(pto) # Pto

2.6. 反转

greeting = 'Hello, World!'
print(greeting[::-1]) # !dlroW ,olleH

2.7. 首字母大写

  • capitalize() 格式化为非首字母均小写,第一个词首字母大写,其他词首字母小写
  • title() 每个词首字母大写,非首字母均小写
# capitalize
challenge = 'thirty days of python'
print(challenge.capitalize()) # 'Thirty days of python'

# title
challenge = 'thirty days of python'
print(challenge.title()) # Thirty Days Of Python

2.8. 大小写替换swapcase

  • swapcase()
challenge = 'thirty days of python'
print(challenge.swapcase())   # THIRTY DAYS OF PYTHON
challenge = 'Thirty Days Of Python'
print(challenge.swapcase())  # tHIRTY dAYS oF pYTHON

2.9.全大写upper/全小写lower

  • upper()
  • lower()

2.10. 替代replace

  • replace()
challenge = 'thirty days of python'
print(challenge.replace('python', 'coding')) # 'thirty days of coding'

2.11. 去掉头尾strip

  • strip()
  • strip([chars]) 字符串头尾指定的字符(默认为空格或换行符)或字符序列 该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
>>> str = "00000003210Runoob01230000000"
>>> str.strip('0') # 去除首尾字符 0 
'3210Runoob0123' 

>>> str2 = " Runoob "
>>> str2.strip() # 去除首尾空格
'Runoob'
 
>>> challenge = 'thirty days of pythoonnn'
>>> print(challenge.strip('noth')) 
'irty days of py'

2.12. 统计出现次数count

  • count(substring)
  • count(substring,start,end)
challenge = 'thirty days of python'
print(challenge.count('y')) # 3
print(challenge.count('y', 7, 14)) # 1, 
print(challenge.count('th')) # 2`

2.13. 查找find

  • 安全的查找方法
    • find(substring) 正向查找,返回第一个;如没有,则返回-1
    • find(substring,start)
    • find(substring,start,end)
    • rfind(substring) 反向查找,返回最后一个;如没有,则返回-1
    • rfind(substring,start)
    • rfind(substring,start,end)
  • 不安全的查找方法
    • index(substring) 正向查找,返回第一个;如没有,则报错
    • index(substring,start)
    • index(substring,start,end)
    • rindex(substring) 反向查找,返回最后一个;如没有,则报错
    • rindex(substring,start)
    • rindex(substring,start,end)
# find返回第一个
challenge = 'thirty days of python'
print(challenge.find('y'))  # 5
print(challenge.find('th')) # 0

# find返回最后一个
challenge = 'thirty days of python'
print(challenge.rfind('y'))  # 16
print(challenge.rfind('th')) # 17

# index返回第一个
challenge = 'thirty days of python'
sub_string = 'da'
print(challenge.index(sub_string))  # 7
print(challenge.index(sub_string, 9)) # error

# index返回最后一个
challenge = 'thirty days of python'
sub_string = 'da'
print(challenge.rindex(sub_string))  # 8
print(challenge.rindex(sub_string, 9)) # error

2.14. Tab扩大空格大小expandtabs

  • expandtabs()
  • expandtabs(tab_size) 默认tab_size是8
challenge = 'thirty\tdays\tof\tpython'
print(challenge.expandtabs())   # 'thirty  days    of      python'
print(challenge.expandtabs(10)) # 'thirty    days      of        python'

>>> str = "Name\tAge\tCountry\tCity\nAsabeneh\t250\tFinland\tHelsinki"
>>> str
'Name\tAge\tCountry\tCity\nAsabeneh\t250\tFinland\tHelsinki'
>>> print(str)
Name    Age     Country City
Asabeneh        250     Finland Helsinki
>>> print(str.expandtabs())
Name    Age     Country City
Asabeneh        250     Finland Helsinki
>>> print(str.expandtabs(10))
Name      Age       Country   City
Asabeneh  250       Finland   Helsinki

2.15. 是否以xx开头startswith/结尾endswith

  • startswith(substring)
  • endswith(substring)
# startswith
challenge = 'thirty days of python'
print(challenge.startswith('thirty')) # True

challenge = '30 days of python'
print(challenge.startswith('thirty')) # False

# endswith
challenge = 'thirty days of python'
print(challenge.endswith('on'))   # True
print(challenge.endswith('tion')) # False

2.16. 是否全是字母或数字isalnum

  • isalnum()
challenge = 'ThirtyDaysPython'
print(challenge.isalnum()) # True

challenge = '30DaysPython'
print(challenge.isalnum()) # True

challenge = 'thirty days of python'
print(challenge.isalnum()) # False, space is not an alphanumeric character

challenge = 'thirty days of python 2019'
print(challenge.isalnum()) # False

2.17. 是否全是字母isalpha

  • isalpha()
challenge = 'thirty days of python'
print(challenge.isalpha()) # False, space is once again excluded
challenge = 'ThirtyDaysPython'
print(challenge.isalpha()) # True
num = '123'
print(num.isalpha())      # False

2.18. 是否全是数字

  • isdecimal():只有0-9
  • isdigit():0-9 and some other unicode characters for numbers
  • isnumeric():just like isdigit(), just accepts more symbols, like ½
# 不包括小数
>>> challenge = '3.14'
>>> challenge.isdecimal()
False
>>> challenge.isdigit()
False
>>> challenge.isnumeric()
False

# isdecimal
challenge = 'thirty days of python'
print(challenge.isdecimal())  # False
challenge = '123'
print(challenge.isdecimal())  # True
challenge = '\u00B2'
print(challenge.isdigit())   # False
challenge = '12 3'
print(challenge.isdecimal())  # False, space not allowed

# isdigit
challenge = 'Thirty'
print(challenge.isdigit()) # False
challenge = '30'
print(challenge.isdigit())   # True
challenge = '\u00B2'
print(challenge.isdigit())   # True

# isnumeric
num = '10'
print(num.isnumeric()) # True
num = '\u00BD' # ½
print(num.isnumeric()) # True
num = '10.5'
print(num.isnumeric()) # False

2.19. 是否是合法变量名isidentifier

  • isidentifier()
challenge = '30DaysOfPython'
print(challenge.isidentifier()) # False, because it starts with a number
challenge = 'thirty_days_of_python'
print(challenge.isidentifier()) # True

2.20. 是否全是大写isupper/小写islower

  • isupper()
  • islower()
# islower
challenge = 'thirty days of python'
print(challenge.islower()) # True
challenge = 'Thirty days of python'
print(challenge.islower()) # False

# isupper
challenge = 'thirty days of python'
print(challenge.isupper()) #  False
challenge = 'THIRTY DAYS OF PYTHON'
print(challenge.isupper()) # True

3. List Operations

3.1. Create

方式一:内置函数 list()

方式二:方括号 []

[i for i in iterable if expression]

方式三:List Comprehension

# empty
lst = list()
lst = []

# init
nums = [0, 1, 2, 3, 4, 5]  # all are the same data types - a list of numbers
fruits = ['banana', 'orange', 'mango', 'lemon'] # all the same data types - a list of strings (fruits)
diffs = ['Banana', 10, False, 9.81] # different data types in the list - string, integer, boolean and float

language = 'Python'
lst = list(language) # changing the string to list
print(type(lst))     # list
print(lst)           # ['P', 'y', 't', 'h', 'o', 'n']

# Print the lists and its length
print('Fruits:', fruits)
print('Number of fruits:', len(fruits))

language = 'Python'
lst = [i for i in language]
print(type(lst)) # list
print(lst)       # ['P', 'y', 't', 'h', 'o', 'n']

# Generating numbers
numbers = [i for i in range(11)]  # to generate numbers from 0 to 10
print(numbers)                    # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# It is possible to do mathematical operations during iteration
squares = [i * i for i in range(11)]
print(squares)                    # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# It is also possible to make a list of tuples
numbers = [(i, i * i) for i in range(11)]
print(numbers)                             # [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]


# Generating even numbers
even_numbers = [i for i in range(21) if i % 2 == 0]  # to generate even numbers list in range 0 to 21
print(even_numbers)                    # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# Generating odd numbers
odd_numbers = [i for i in range(21) if i % 2 != 0]  # to generate odd numbers in range 0 to 21
print(odd_numbers)                      # [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
# Filter numbers: let's filter out positive even numbers from the list below
positive_even_numbers = [i for i in range(21) if i % 2 == 0 and i > 0]
print(positive_even_numbers)                    # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# Flattening a three dimensional array
list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_list = [ number for row in list_of_lists for number in row]
print(flattened_list)    # [1, 2, 3, 4, 5, 6, 7, 8, 9]

3.2. Access&Modify

lst[index]

• 正索引

• 负索引

# 正索引
second_fruit = fruits[1]
print(second_fruit)     # orange
fruits[0] = 'avocado'
print(fruits)       #  ['avocado', 'orange', 'mango', 'lemon']

# 负索引
first_fruit = fruits[-4]
print(first_fruit)      # banana

3.3. Find Index

lst.index(item)

fruits = ['banana', 'orange', 'mango', 'lemon']
print(fruits.index('orange'))   # 1
ages = [22, 19, 24, 25, 26, 24, 25, 24]
print(ages.index(24))           # 2, the first occurrence

3.4. Items

1、Unpack List Items

1)item1,item2,*rest = list

2)*list

2、Slice List Items

list[start:end:step]

start和end可以是正索引,也可以是负索引

左闭右开:[start,end)

list1 = [1,2,3]
list2 = [4,5,6]
list2[:] = list1 # 将list2完全替换为list1
print(list2) # [1, 2, 3]
list2[2:] = list1 # 将list2的下标2及之后的元素用list1替换
print(list2) # [1, 2, 1, 2, 3]
# First Example
fruits = ['banana', 'orange', 'mango', 'lemon','lime','apple']
first_fruit, second_fruit, third_fruit, *rest = lst
print(first_fruit)     # banana
print(second_fruit)    # orange
print(third_fruit)     # mango
print(rest)           # ['lemon','lime','apple']

# Second Example about unpacking list
first, second, third,*rest, tenth = [1,2,3,4,5,6,7,8,9,10]
print(first)          # 1
print(second)         # 2
print(third)          # 3
print(rest)           # [4,5,6,7,8,9]
print(tenth)          # 10

# Third Example
def sum_of_five_nums(a, b, c, d, e):
    return a + b + c + d + e

lst = [1, 2, 3, 4, 5]
print(sum_of_five_nums(*lst))  # 15


fruits = ['banana', 'orange', 'mango', 'lemon']
all_fruits = fruits[0:4] # it returns all the fruits
# this will also give the same result as the one above
all_fruits = fruits[0:] # if we don't set where to stop it takes all the rest
orange_and_mango = fruits[1:3] # it does not include the first index
orange_mango_lemon = fruits[1:]
orange_and_lemon = fruits[::2] # here we used a 3rd argument, step. It will take every 2cnd item - ['banana', 'mango']

all_fruits = fruits[-4:] # it returns all the fruits
orange_and_mango = fruits[-3:-1] # it does not include the last index,['orange', 'mango']
orange_mango_lemon = fruits[-3:] # this will give starting from -3 to the end,['orange', 'mango', 'lemon']
reverse_fruits = fruits[::-1] # a negative step will take the list in reverse order,['lemon', 'mango', 'orange', 'banana']

3.5. Insert

1、在末尾添加

list.append(item)

2、在index位置添加

list.insert(index,item)

fruits.append('apple')
fruits.insert(2, 'apple')

3.6. Remove

1、按item

list.remove(item) 去掉出现的第一个item

2、按index

list.pop() 去掉最后一项

list.pop(index) 去掉index那项

3、按index,range,all

del 关键字

del list[index]

del list[start:end]

del list

4、clear

list.clear()

# remove
fruits = ['banana', 'orange', 'mango', 'lemon', 'banana']
fruits.remove('banana')
print(fruits)  # ['orange', 'mango', 'lemon', 'banana'] - this method removes the first occurrence of the item in the list

# pop
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.pop()
print(fruits)       # ['banana', 'orange', 'mango']

fruits.pop(0)
print(fruits)       # ['orange', 'mango']

# del
fruits = ['banana', 'orange', 'mango', 'lemon', 'kiwi', 'lime']
del fruits[0]
print(fruits)       # ['orange', 'mango', 'lemon', 'kiwi', 'lime']
del fruits[1]
print(fruits)       # ['orange', 'lemon', 'kiwi', 'lime']
del fruits[1:3]     # this deletes items between given indexes, so it does not delete the item with index 3!
print(fruits)       # ['orange', 'lime']
del fruits
print(fruits)       # This should give: NameError: name 'fruits' is not defined

# clear
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.clear()
print(fruits)       # []

3.7. Contain

  • in

item in list

fruits = ['banana', 'orange', 'mango', 'lemon']
does_exist = 'banana' in fruits
print(does_exist)  # True
does_exist = 'lime' in fruits
print(does_exist)  # False

3.8. Copy

list.copy()

fruits = ['banana', 'orange', 'mango', 'lemon']
fruits_copy = fruits.copy()
print(fruits_copy)       # ['banana', 'orange', 'mango', 'lemon']

3.9. Connect

方式一:Plus Operator (+)

list3 = list1 + list2 + list3

方式二:extend()

list1.extend(list2)

方式三:unpack:*list

lst = [*list_one, *list_two]

positive_numbers = [1, 2, 3, 4, 5]
zero = [0]
negative_numbers = [-5,-4,-3,-2,-1]

# plus operator
integers = negative_numbers + zero + positive_numbers
print(integers) # [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

# extend
negative_numbers.extend(zero)
negative_numbers.extend(positive_numbers)
print('Integers:', negative_numbers) # Integers: [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

# unpack
lst_one = [1, 2, 3]
lst_two = [4, 5, 6, 7]
lst = [0, *list_one, *list_two]
print(lst)          # [0, 1, 2, 3, 4, 5, 6, 7]

3.10. Count

list.count(item)

3.11. Reverse

list.reverse()

Note:会在原本list上生效

fruits = ['banana', 'orange', 'mango', 'lemon']
print(fruits.index('orange'))   # 1
ages = [22, 19, 24, 25, 26, 24, 25, 24]
print(ages.index(24))           # 2, the first occurrence

3.12. Sort

方式一:sort() List函数

Note:会在原本list上生效

lst.sort() # ascending

lst.sort(reverse=True) # descending

# sort
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits.sort()
print(fruits)             # sorted in alphabetical order, ['banana', 'lemon', 'mango', 'orange']
fruits.sort(reverse=True)
print(fruits) # ['orange', 'mango', 'lemon', 'banana']
ages = [22, 19, 24, 25, 26, 24, 25, 24]
ages.sort()
print(ages) #  [19, 22, 24, 24, 24, 25, 25, 26]

ages.sort(reverse=True)
print(ages) #  [26, 25, 25, 24, 24, 24, 22, 19]

方式二:sorted() 内置函数

Note:不会在原本list上生效

sorted(list)

sorted(list,reverse=True)

# sorted
fruits = ['banana', 'orange', 'mango', 'lemon']
print(sorted(fruits))   # ['banana', 'lemon', 'mango', 'orange']
# Reverse order
fruits = ['banana', 'orange', 'mango', 'lemon']
fruits = sorted(fruits,reverse=True)
print(fruits)     # ['orange', 'mango', 'lemon', 'banana']

3.13. index,item循环

语法

for index,item in enumerate(list):
    print(index, item)

示例

for index, i in enumerate(countries):
    print('hi')
    if i == 'Finland':
        print('The country {i} has been found at index {index}')

""" 输出结果
The country Finland has been found at index 1.
"""

3.14. zip组合循环

语法

for f, v in zip(fruits, vegetables):
    fruits_and_veges.append({'fruit':f, 'veg':v})

示例

fruits = ['banana', 'orange', 'mango', 'lemon', 'lime']                    
vegetables = ['Tomato', 'Potato', 'Cabbage','Onion', 'Carrot']
fruits_and_veges = []
for f, v in zip(fruits, vegetables):
    fruits_and_veges.append({'fruit':f, 'veg':v})

print(fruits_and_veges)

""" 输出结果
[{'fruit': 'banana', 'veg': 'Tomato'}, {'fruit': 'orange', 'veg': 'Potato'}, {'fruit': 'mango', 'veg': 'Cabbage'}, {'fruit': 'lemon', 'veg': 'Onion'}, {'fruit': 'lime', 'veg': 'Carrot'}]
"""

4. Tuple Operations

4.1. Access

tpl[index]

• 正索引

• 负索引

正索引
正索引
负索引
负索引

4.2. Unpack

tuple同list一致

1)item1,item2,*rest = tpl

2)*tpl

4.3. Slice

tpl[start🔚step]

4.4. ChangeType

lst = list(tpl)

tpl=tuple(list)

4.5. Contain

item in tpl

4.6. Connect

tpl3 = tpl1 + tpl2 + tpl3

4.7. Delete

del关键字

del tpl

5. Set Operations

5.1. Create

1. empty

set1 = set()

Note:不可使用set1 = {}初始化,这会是dict类型

2. init

set1 = {'item1', 'item2', 'item3', 'item4'}

5.2. Access

loops

5.3. Contain

item in set

5.4. Add

1. one item

set.add(item)

2.multiple items

set.update(list/tuple/set1)

set.union(set1)  join

5.5. Remove

1.指定

set.remove(item)

没有会报错

set.discard(item)

没有不报错

2.随机

removed_item = set.pop()

pop会返回删除项

3.清空

set.clear()

4.完全删除

del关键字

del set

5.6. ChangeType

set = set(list)

list = list(set)

5.7. 交集 Intersection

set1.intersection(set2)

# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item3', 'item2'}
st1.intersection(st2) # {'item3', 'item2'}

5.8. 差集 Difference

1.单向

Note:以下两个结果不同

set1.difference(set2)

set2.difference(set1)

2.双向

Note:以下两个结果相同,均返回单向差集的和

set1.symmetric_difference(set2)

set2.symmetric_difference(set1)

>>> python = {'p', 'y', 't', 'h', 'o','n'}
>>> dragon = {'d', 'r', 'a', 'g', 'o','n'}

# 单向
>>> python.difference(dragon)
{'t', 'p', 'y', 'h'}
>>> dragon.difference(python)
{'r', 'd', 'g', 'a'}

# 双向
>>> python.symmetric_difference(dragon)
{'r', 'g', 'p', 'd', 'y', 'h', 't', 'a'}
>>> dragon.symmetric_difference(python)
{'r', 'g', 'd', 'p', 'y', 'h', 't', 'a'}

5.9. 是否是子集/父集

Subset: issubset()

set1.issubset(set2)

Super set: issuperset()

set1.issuperset(set2)

# syntax
st1 = {'item1', 'item2', 'item3', 'item4'}
st2 = {'item2', 'item3'}
st2.issubset(st1) # True
st1.issuperset(st2) # True

5.10. 是否互斥

set1.isdisjoint(set2)

even_numbers = {0, 2, 4 ,6, 8}
even_numbers = {1, 3, 5, 7, 9}
even_numbers.isdisjoint(odd_numbers) # True, because no common item

python = {'p', 'y', 't', 'h', 'o','n'}
dragon = {'d', 'r', 'a', 'g', 'o','n'}
python.isdisjoint(dragon)  # False, there are common items {'o', 'n'}

6. Dictionary Operations

6.1. Create

1、empty

empty_dict = {}

2、init

dict = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
person = {
    'first_name':'Asabeneh',
    'last_name':'Yetayeh',
    'age':250,
    'country':'Finland',
    'is_marred':True,
    'skills':['JavaScript', 'React', 'Node', 'MongoDB', 'Python'],
    'address':{
        'street':'Space street',
        'zipcode':'02210'
    }
    }

6.2. Access & Add & Update

1、查询、新增、修改

dict['key']

Note:原本有key,可查询,可修改;原本没key,可新增

Note:如果不是新增,key不存在,则报错

2、只查询

dict.get('key')

Note:如果key不存在,则返回None
# dict['key']
print(person['first_name']) # Asabeneh
print(person['country'])    # Finland
print(person['skills'])     # ['JavaScript', 'React', 'Node', 'MongoDB', 'Python']
print(person['skills'][0])  # JavaScript
print(person['address']['street']) # Space street
print(person['city'])       # Error

# Add key
person['job_title'] = 'Instructor'
# Update value
person['skills'].append('HTML')
person['first_name'] = 'Eyob'
person['age'] = 252


# dict.get('key')
print(person.get('first_name')) # Asabeneh
print(person.get('country'))    # Finland
print(person.get('skills')) #['HTML','CSS','JavaScript', 'React', 'Node', 'MongoDB', 'Python']
print(person.get('city'))   # None

6.3. Contain

key in dict

# syntax
dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
print('key2' in dct) # True
print('key5' in dct) # False

6.4. Remove

1、去除key

dict.pop(key)

2、去除最后一项

dict.popitem()

3、清空

dict.clear()

4、去除key或完全去除

del 关键字

del dict[key]

del dict

6.5. ChangeType

1、tuples list

dict.items()

2、keys list

keys = dict.keys()

3、values list

values = dict.values()
# tuples list
dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
print(dct.items()) # dict_items([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3'), ('key4', 'value4')])


# keys
dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
keys = dct.keys()
print(keys)     # dict_keys(['key1', 'key2', 'key3', 'key4'])

# values
dct = {'key1':'value1', 'key2':'value2', 'key3':'value3', 'key4':'value4'}
values = dct.values()
print(values)     # dict_values(['value1', 'value2', 'value3', 'value4'])

6.6. Copy

dict_copy = dict.copy()

6.7. Unpack

**dict
def unpacking_person_info(name, country, city, age):
    return f'{name} lives in {country}, {city}. He is {age} year old.'
dct = {'name':'Asabeneh', 'country':'Finland', 'city':'Helsinki', 'age':250}
print(unpacking_person_info(**dct)) # Asabeneh lives in Finland, Helsinki. He is 250 years old.