我尝试使用Python 2.7生成多个长度的所有可能字符组合的列表。为了举例,我使用了一个更小的子集来证明这个概念。
下面我生成A-C中长度为1和2的所有字母组合。然后尝试使用同一生成器理解中的第二个for循环生成一个列表(错误的术语?)。我可以将单个长度的所有字符串放入列表中,但在尝试
时出现错误an integer is required
如何连接产品生成器函数中repeat
的每个级别的所有响应?
>>> l
['A', 'B', 'C']
>>> p1 = (''.join(p) for p in product(l, repeat=1))
>>> p2 = (''.join(p) for p in product(l, repeat=2))
>>> [str(i) for i in p1]
['A', 'B', 'C']
>>> [str(i) for i in p2]
['AA', 'AB', 'AC', 'BA', 'BB', 'BC', 'CA', 'CB', 'CC']
>>> pn = (''.join(p) for p in product(l, repeat=i) for i in range(1,3))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: an integer is required
是的,我可以使用嵌套for循环执行此操作。我尝试用单行代码来做这件事,因为我看到了类似于生成器理解的例子。我之前使用过列表推导 - 但是当我提供嵌套列表推导时,我会得到整个组合列表的长串列表。
也可能是因为我无法正确理解迭代器函数,因为我在代码示例中的第5行和第7行上努力使这些调试列表理解正确。
答案 0 :(得分:3)
你让你在你的生成器表达式中以错误的方式循环,它们从左到右“嵌套”:
$ awk 'NR==FNR{a[$1]=$2; next} {print $1, a[$1]}' file1 file2
title1 linkabc
anothertitle2
title3 linkfgh
anothertitle4
title5 linklsfr
anothertitle6
title7 linksdrlk
anothertitle8
title9 linkghftht