set()影响字符串列表等的顺序
集合本身无序
但是list可以有序
实例:
string1='we are family!' print(string1) set1=set(string1) print(set1) list1=list(set1) list1.sort(key=string1.index) print(list1)
we are family! {' ', 'm', 'w', 'y', 'i', 'l', 'a', '!', 'f', 'r', 'e'} ['w', 'e', ' ', 'a', 'r', 'f', 'm', 'i', 'l', 'y', '!']
zip()
语法:zip(iter1,iter2,iter3....)
其效果的help()解释
Return a zip object whose .next() method returns a tuple where the i-th element comes from the i-th iterable argument.The.next()
method continues until the shortest iterable in the argument sequence is exhausted and then it raises StopIteration.
- 返回一个元组迭代器
- 第i个元组有每个可迭代参数或对象的第i个元素
- 当最小可迭代输入耗尽时,迭代器终止。
- 单个可迭代参数-返回一个1元组迭代器
- 无参数-返回一个空的元组迭代器
要知道的重要一件事是zip()函数返回什么。
尽管似乎在调用此函数时会得到一个列表,但实际上它返回一个称为zip object的特殊数据类型,这意味着使用索引将无法浏览,下面我们学习如何将其转换为其他数据类型(例如列表)。
请在这里输入引用内容
在此之前,我们还应再来学习一下迭代(Iteration)、迭代器对象(iterable)、迭代器(iterator )的概念:
- Iteration是计算机科学的通用术语。它是指对一组元素执行一项操作,一次执行一个元素。一个很好的例子是循环 -它适用于每个单独的项目,直到整个项目集运行完毕为止。
- Iterable是可以遍历的对象(译者注:在Python中所有东西都是object, 比如说变量,容器,类),iterable是可以产生iterator的object。
- iterator是表示数据流的对象,它一次返回一个元素的数据。它还会记住其在迭代过程中的位置。本质上,它控制应如何迭代可迭代对象。
可以使用*对zip进行unzip
实例:
iter1=['a','b','c'] iter2=['d','e','f'] iter3=[1,2,3,4,5] for x,y,z in zip(iter1,iter2,iter3): print(x,y,z) dict1=dict(zip(iter1,iter2)) #以字典形式输出,此时zip内参数只能有两个 print(dict1) print(zip(iter1)) #直接输出的zip不可以直接索引阅读 print(list(zip(*zip(iter1,iter2,iter3)))) #将zip转化为列表输出
输出
a d 1 b e 2 c f 3 {'a': 'd', 'b': 'e', 'c': 'f'} <zip object at 0x000002437CA62108> [('a', 'b', 'c'), ('d', 'e', 'f'), (1, 2, 3)]
解压赋值:
iter1=['a','b','c'] iter2=['d','e','f'] a1,b1 =zip(*zip(iter1,iter2)) print(iter1==list(a1),iter2==list(b1))
输出
['a', 'b', 'c'] ['d', 'e', 'f'] True True
zip与列表生成式(for循环潜在问题)
在应用for循环后注意缺少的元素!
实例:
iter1=['a','b','c'] iter2=['d','e','f'] iter3=['g','h','i'] [print(a1, a2, a3) for a1,a2,a3 in zip(iter1,iter2,iter3)]
输出
a d g b e h c f i
参数数量与zip参数数目需要一致
并且,限于作用域的问题,a1,a2,a3只在列表表达式中才有意义,在这之外进行输出会报NameError错
注意:这是用列表表达式输出的结果,若果在for循环中,然后打印a,虽然输出的结果相同,但是a的值只是部分值
实例:
iter1=['a','b','c'] iter2=['d','e','f'] iter3=['g','h','i'] [print(a1, a2, a3) for a1,a2,a3 in zip(iter1,iter2,iter3)] print("for循环:") for a1,a2,a3 in zip(iter1,iter2,iter3): print(a1,a2,a3) print("结束值"+a1,a2,a3)
输出
a d g b e h c f i for循环: a d g b e h c f i 结束值c f i
由此可见for循环与列表表达式的运行方式是不同的。
原文链接:
https://cloud.tencent.com/developer/article/1581498
列表生成式
语法
[x for x in iterable if ]
实例
number=[x for x in range(1,10) if x%2==0] print(number)
[2, 4, 6, 8]
支持双重for循环
实例
number=[x+y for x in range(1,3) for y in range(4,6)] print(number)
[5, 6, 6, 7]
字典生成式
list1=[("name","zhang"),("age","22"),("phone","110")] dict1={key:value for key,value in list1} print(dict1)
{'name': 'zhang', 'age': '22', 'phone': '110'}
注意,字典生成式参数有两个,而且中间有引号
原文链接:
https://www.liaoxuefeng.com/wiki/897692888725344/923029657876192
https://blog.csdn.net/hellocsz/article/details/81750589