这个循环功能是否有可能改写这个循环:重写与范围
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]]:
两个范围的函数或“名单倍增”?我尝试了各种方法,但都没有工作到目前为止。
谢谢。
这个循环功能是否有可能改写这个循环:重写与范围
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]]:
两个范围的函数或“名单倍增”?我尝试了各种方法,但都没有工作到目前为止。
谢谢。
如果你有对象名单的其实很简单:
object_list = [aa, ab, ... ]
for n, k in enumerate(object_list, start=1):
...
所以,你应该寻找一种方法,把它们放在一个列表,而不是。
非常好。谢谢。 – relima 2010-11-15 15:56:52
如果所有这些对象都在模块全局命名空间,你可以做这样的事情:
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()
与@pyfunc相同:是什么让你认为OP需要字符串? – 2010-11-15 15:50:36
哦,哎呀,我误读了那部分。 – GWW 2010-11-15 15:51:25
你没有给出很多信息,所以这可能不是你正在寻找的,但:
l = [aa, ab, ... ]
for i in xrange(len(l)):
k = l[i]
n = i+1
//the rest of your code
这就是说,基于第e变量名称,它看起来像你有一个值矩阵。如果是这样的话,那么使用这种类型的结构会更有意义,并且只是迭代两个索引而不是拥有大量的命名变量。
每当你在Python中编写'[x] range(len(...))'',你要么有非常奇怪的要求,要么你没有正确使用迭代器。 – delnan 2010-11-15 15:55:55
好点,这是一个26x4表尖叫。我没有考虑到我的答案。 – 2010-11-15 16:17:11
假设你在一个迭代有这些matplotlib,objs
:
([i, obj] for i, obj in enumerate(objs, 1))
这可以做得更短,更简单,如果你使用的2元组,而不是长度为二列表(你propably想要这个反正!) :enumerate(objs, 1)
。
无论如何,他反复遍历它们('for k,n in ...'),你甚至不需要把它列为一个列表。 – 2010-11-15 15:55:26
@ Space_C0wb0y:是的,谢谢你的提示 - 把它变成了一个发电机。 – delnan 2010-11-15 15:56:39
天真的方法:
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
谁做同样的事情来代替。
试试这些。
[[j,i] for i,j in enumerate([c1+c2 for c1 in ascii_lowercase for c2 in ascii_lowercase[0:4]])]
[j,i]只是按您说的顺序打印。放置功能或任何你想要的。
或者如果你喜欢循环列出-COMP
for i,j in enumerate([c1+c2 for c1 in ascii_lowercase for c2 in ascii_lowercase[0:4]]):
#loop body
即时猜测AA通ZD要么在全局命名空间或(希望)的字典?只需在c1 + c2周围放置eval()或字典名称
for i,j in enumerate([dictname['c1+c2'] for c1 in ascii_lowercase for c2 in ascii_lowercase[0:4]]):
#loopbody
什么是'aa','ab',...? – delnan 2010-11-15 15:41:59
它是一系列matplotlib对象。每个控制较大图表的一个子图。 – relima 2010-11-15 15:46:32
除非你有所有这些'aa'等,在某种可迭代的情况下,没有办法让这个更短。 – 2010-11-15 15:48:27