为什么不能从生成器中获取所有值?

时间:2018-08-14 02:21:49

标签: python-3.x

args = (i for i in ["A", "B", "C", "A"])
for x in ["C", "B", "A"]:
    kw = [i for i in args if i == x]
    for j in kw:
        print(j)

当我运行此脚本时,结果只有“ C”。 我如何获得所有元素?

3 个答案:

答案 0 :(得分:1)

尝试一下

args = ["A", "B", "C", "A"]

因为您正在使用生成器,这就是为什么它不起作用的原因,所以直接执行列表即可。

完整代码:

args = ["A", "B", "C", "A"]
for x in ["C", "B", "A"]:
    kw = [i for i in args if i == x]
    for j in kw:
        print(j)

输出:

C
B
A
A

说明:

当您迭代生成器时,生成器将为空,就像next一样,它将类似于list.pop(0),生成器与def(函数)中的yield相同

答案 1 :(得分:0)

由于args是一个迭代器,因此一旦对其进行迭代(在第三行中进行),就无法再次对其进行迭代。我建议您做的是将args转换为列表或元组。因此,代替此:

args = (i for i in ["A", "B", "C", "A"])

执行以下任一操作:

列表:

args = ["A", "B", "C", "A"]

元组:

args = ("A", "B", "C", "A")

答案 2 :(得分:0)

为什么不呢?

args = (i for i in ["A", "B", "C", "A"])  
x = ["C", "B", "A"]: 
kw = [i for i in args if i in x]  

for j in kw: print(j)