是否可以重写此循环:
for k,n in [[aa,1],[ab,2], [ac,3], [ad,4], [ba,5], [bb,6], [bc,7], [bd,8],
[ca,9],[cb,10],[cc,12],[cd,13],[da,14],[db,15],[dc,16],[dd,17],...zd,220]]:
有两个范围函数还是“列表乘法”?我尝试了各种各样的方法,但到目前为止都没有。
谢谢。
答案 0 :(得分:4)
如果列表中的对象实际上非常简单:
object_list = [aa, ab, ... ]
for n, k in enumerate( object_list, start=1):
...
所以你应该找一种方法把它们放在一个列表中。
答案 1 :(得分:0)
如果所有这些对象都在模块全局命名空间中,您可以执行以下操作:
from string import ascii_lowercase
n = 1
for a in ascii_lowercase:
for b in ascii_lowercase[0:4]:
k = globals()[a+b]
n+=1
如果它们位于函数的命名空间中,您可以尝试locals()
而不是globals()
答案 2 :(得分:0)
你没有提供太多信息,所以这可能不是你想要的,但是:
l = [aa, ab, ... ]
for i in xrange(len(l)):
k = l[i]
n = i+1
//the rest of your code
话虽如此,基于变量的名称,看起来你有一个值矩阵。如果是这种情况,那么使用这种结构更有意义,只需迭代两个索引而不是拥有大量命名变量。
答案 3 :(得分:0)
假设您在可迭代的objs
:
([i, obj] for i, obj in enumerate(objs, 1))
如果您使用2元组而不是长度为2的列表(无论如何您仍然希望这样做),这可以变得更短更简单。:enumerate(objs, 1)
。
答案 4 :(得分:0)
一种天真的方法:
alphabet = ['a','b','c','d','e',] # Continue to have a complete alphabet
# Generator that returns every combination of a given alphabet with a given length
def xcombinations(items, n):
if n==0: yield []
else:
for i in xrange(len(items)):
for cc in xcombinations(items[:i]+items[i+1:],n-1):
yield [items[i]]+cc
gen = xcombinations(alphabet, 2)
for p,k in enumerate(gen):
print ["".join(k), p]
编辑:
xcombinations
可以由执行相同操作的itertools.permutations
替换。
答案 5 :(得分:0)
尝试这些。
[[j,i] for i,j in enumerate([c1+c2 for c1 in ascii_lowercase for c2 in ascii_lowercase[0:4]])]
[j,i]只是按照你说的顺序打印。把功能或任何你想要的东西放在那里 或者如果你更喜欢循环到list-comp
for i,j in enumerate([c1+c2 for c1 in ascii_lowercase for c2 in ascii_lowercase[0:4]]):
#loop body
猜测aa到zd要么在全局命名空间中,要么(希望是)dict?只需在c1 + c2周围放置eval()或dict名称
for i,j in enumerate([dictname['c1+c2'] for c1 in ascii_lowercase for c2 in ascii_lowercase[0:4]]):
#loopbody