我試圖遍歷長度1到8(含)之間的所有可能的組合string
。 我的主要目標是讓代碼儘可能少。要做到這一點,我目前使用Python的itertools
庫:Python 2.7:迭代一行代碼中的字符串的所有組合
import itertools, string
for i in xrange(1, 9):
for x in itertools.imap(''.join, itertools.product(string.letters + string.digits + string.punctuation, repeat = i)):
if x == some_string:
# do something, like print x
print x
break
else:
continue
break
我希望能夠做迭代在同一行,這樣我就可以break
了一次內外for
迴路,和將不需要的else:
,continue
,break
等事情是這樣的:(使用嵌套循環for
)
for x in (itertools.imap(''.join, itertools.product(string.letters + string.digits + string.punctuation, repeat = i)) for i in xrange(1, 9)):
if x == some_string:
print x
break
然而,x
原來是一個<itertools.imap object>
。於是,我就遍歷x
,使用多個嵌套循環for
(因爲如果我使用內循環for
,我將不得不break
多次再次):
for y in (x for x in (itertools.imap(''.join, itertools.product(string.letters + string.digits + string.punctuation, repeat = i)) for i in xrange(1, 9))):
if y == some_string:
print y
break
不幸的是,仍然無法正常工作; y
不知何故仍然是<itertools.imap object>
。我是一名自學Python程序員,generators
,iterables
等有時令我感到困惑。有人可以幫我把迭代到一行嗎?非常感謝。
遍歷所有這些組合是一個**可怕,可怕的**,以檢查是否some_string''就是其中的一種方式。 – user2357112
我同意;然而,蠻力是我得到的任務。 –
這樣......你會有'Memory Error', –