2*3 2**3 #output : 6, 82,解包的几种情况
Lien = https://peps.python.org/pep-3132/#specification
lien = https://geekflare.com/fr/python-unpacking-operators/
* 和 **针对的都是可迭代对象
**针对的是dic
例 1
a=*range(0,6), #不要忘了',' a,type(a) #output : ((0, 1, 2, 3, 4, 5), tuple)
例 2
s={1,2,3,4,5}
*s, type((*s,)) # (1, 2, 3, 4, 5, tuple)
接例 2
set("12345") # {'1', '2', '3', '4', '5'}
*set("12345"), #('2', '3', '1', '4', '5')
tuple(set("12345")) #('2', '3', '1', '4', '5')
例 3
a,*b,c=[1,2,3,4,5] a,b,c # b 返回的是list #output : (1, [2, 3, 4], 5)
例 4
a,*_,c=[9,8,7,6,5,4,3] a,_,c # _ 返回的是list #output : (9, [8, 7, 6, 5, 4], 3)
例 5
# *string='asdvzxybhjsalxcinkdxcvkmdf' #报错starred assignment target must be in a list or tuple *string,='asdvzxybhjsalxcinkdxcvkmdf' #返回的是list #output : ['a', 's', 'd', 'v', 'z', 'x', 'y', 'b', 'h', 'j', 's', 'a', 'l', 'x', 'c', 'i', 'n', 'k', 'd', 'x', 'c', 'v', 'k', 'm', 'd', 'f']
*关于zip(iterables, strict=False)
**zip(iterables, strict=False)**用来压缩。
**zip(*iterable, strict=False)**用来解压缩。
返回一个迭代的tuple
strict用来指定iterables的大小或长度是否一致,默认为false表示可以不一致,如果strict=True表示解压的iterables对象的长度一定要相等。
x = [1, 2, 3] y = [4, 5, 6,7] list(zip(x, y)) #output : [(1, 4), (2, 5), (3, 6)] 这里没有限制strict默认False,也就是不要求iterables对象长度一致,对于长度不相等的iterables,返回的tuple的长度取iterables中长度较短的那个 x2, y2 = zip(*zip(x, y)) x == list(x2), y == list(y2) #output : (True, False)
for item in zip(range(3), ['sugar', 'spice', 'everything nice']):
print(item)
#output :
#(0, 'sugar')
#(1, 'spice')
#(2, 'everything nice')
zip()对迭代对象(list,set,dic,tuple)的处理举例
sales = [300, 200, 100] # 这里可以是tuple
costs = [30, 20, 10]
for s, c in zip(sales, costs):
print(s,c)
profit = s - c
print(f'Total profit: {profit}')
'''如果是set非有序数据,最后结果不是一一对应的'''
sales = {300, 200, 100}
costs = {30, 20, 10}
for s, c in zip(sales, costs):
print(s,c)
profit = s - c
print(f'Total profit: {profit}')
#output
#200 10
#Total profit: 190
#100 20
#Total profit: 80
#300 30
#Total profit: 270
zip()与dic的联动
dict_one = {'name': 'John', 'last_name': 'Doe', 'job': 'Python Consultant'}
dict_two = {'name': 'Jane', 'last_name': 'Doe', 'job': 'Community Manager'}
for (k1, v1), (k2, v2) in zip(dict_one.items(), dict_two.items()):
print("k1={k1}", '->', "v1={v1}")
print("k2={k2}", '->', "v2={v2}")
#output
#k1={k1} -> v1={v1}
#k2={k2} -> v2={v2}
#k1={k1} -> v1={v1}
#k2={k2} -> v2={v2}
#k1={k1} -> v1={v1}
#k2={k2} -> v2={v2}
key, value=zip(*dict_one.items())
key, value
#output
#(('name', 'last_name', 'job'), ('John', 'Doe', 'Python Consultant'))
sales = (300, 200, 100)
costs = (30, 20, 10)
dic=dict(zip(sales,costs))
dic #output : {300: 30, 200: 20, 100: 10}
new_sales=[100]
cost=[100000]
dic.update(zip(new_sales,cost))
dic
# output : {300: 30, 200: 20, 100: 100000}
zip()中的排序
zip(iterable1,iterable2)打包数据时,合并的数据排序按照iterable1来排序,如果iterable1是字母,则按字母排序
letters = ['b', 'a', 'd', 'c']
numbers = [2, 4, 3, 1]
'''按照字母排序'''
d1=list(zip(letters,numbers))
print(d1)
d1.sort()
d1
#output
#[('b', 2), ('a', 4), ('d', 3), ('c', 1)]
#[('a', 4), ('b', 2), ('c', 1), ('d', 3)]
'''按照数字排序'''
d2=list(zip(numbers,letters))
print(d1)
d2.sort()
d2
#[('a', 4), ('b', 2), ('c', 1), ('d', 3)]
#[(1, 'c'), (2, 'b'), (3, 'd'), (4, 'a')]
**可以用来合并字典
例 1
a={1:'a',2:'b'}
b={3:'x',4:'y'}
d={**a} #output : {1: 'a', 2: 'b'}
c={**a,**b} # output :{1: 'a', 2: 'b', 3: 'x', 4: 'y'}
例 2
{**{'v':3, 'c':2}, 's':2}
#output : {'v': 3, 'c': 2, 's': 2}



