字典列表元组的推导式使用方法

元组生成器很特殊

只有元组生成生成器对象

注意事项

元组生成器调用注意事项,只能调用一次!
无论通过哪种方式遍历后,若想再使用该生成器对象,都必须重新创建一个生成器,
因为遍历后的原生成器对象已经不存在了。
从最后一个示例可以看出,每访问生成器对象中的一个元素,就会少一个元素。

大致推导式的格式相似

i for i in 某元素/range # in的是可迭代元素即可
再在外部加上[],(),{}即可

# 用推导式生成一个有12个元素组成,且每个元素均为0的列表 

# python的推导式

a = [0 for i in range(12)] # 列表的
b = (int(i) for i in str("0"*12)) # 元组的比较特殊是生成生成器对象
c = {i:i for i in range(12)} # 字典的
d = [int(i) for i in str("0"*12)]

# 元组打印出来的是生成生成器对象
print(a) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
print(b) # <generator object <genexpr> at 0x000001CA7DC063B8>
print(c) # {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, 10: 10, 11: 11}
print(d) # [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

# 访问生成器对象的方法
"""
生成器调用注意事项,只能调用一次!

无论通过哪种方式遍历后,若想再使用该生成器对象,都必须重新创建一个生成器,
因为遍历后的原生成器对象已经不存在了。

从最后一个示例可以看出,每访问生成器对象中的一个元素,就会少一个元素。
"""

# 1.可以使用tuple()或list()将其转换为元组或列表。如下
# 用list,tuple()会报错,must be str,not be list/tuple
# b1 = tuple(b)
# print("访问生成器对象用tuple方法:"+b1)
# b2 = list(b)
# print("访问生成器对象用list方法:"+b2)
# 创建个新元组生成器对象

tuple1=("Amy","Swan")
newtuple=(ch*3 for ch in tuple1) # 
n1 = [ch*3 for ch in tuple1]
print("打印下这个里面的元素*3遍历长啥样",n1) # ['AmyAmyAmy', 'SwanSwanSwan']

print("打印下这个生成器对象",newtuple) # ['AmyAmyAmy', 'SwanSwanSwan']
# print(list(newtuple)) # ['AmyAmyAmy', 'SwanSwanSwan']
# print(tuple(newtuple)) # ()前面调用了一次生成器对象list(newtuple),所以就为空
print("用tuple在前试试",tuple(newtuple)) # ('AmyAmyAmy', 'SwanSwanSwan')
print("list在后",list(newtuple))   #  []

# 2.使用for循环遍历
for i in b: # b是元组生成器
    print("生成器对象中的元素每遍历一次,元素就会少一个",i)
print('----下面再来打印下生成器对象b-----:',b) # <generator object <genexpr> at 0x000001CA7DC063B8>
# 直接使用__next__进行遍历

tuple1=(233,32,57,44,83,590,651)
tuple2=(x for x in tuple1 if x<100)
print(tuple2.__next__()) # 32
print(tuple2.__next__()) # 57
print(tuple2.__next__())  #   44    #到此为止,生成器中的元素还未打印完
print(tuple(tuple2)) # (83,);最后一个83
print('-'*20)
# 使用next()函数遍历
tuple3=(x for x in tuple1 if x<100)
a = list(tuple3)
print('用list方法来查看元组生成器的具体',a) # [32, 57, 44, 83]

### 使用next()方法报错,难道next()方法只能用在函数对象上
### 这里元素并没有耗尽啊
'''
通过调用 iterator 的 __next__() 方法获取下一个元素。
如果迭代器耗尽,则返回给定的 default,
如果没有默认值则触发 StopIteration。
'''
print(next(tuple3)) # StopIteration
# print(next(tuple3))
# print(next(tuple3))
# print(next(tuple3))


努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
原文地址:https://www.cnblogs.com/wkhzwmr/p/15086014.html