這個循環功能是否有可能改寫這個循環:重寫與範圍
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