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