我有一个消耗我大脑的问题。让我们假设变量I存储序列,变量II存储另一个变量,变量III也存储另一个变量。变量1表示数字1,接下来的2表示下一个3;然后我有另一个关键变量,包含这3个序列的随机字符。给出这个事实,我可以轻松地在对应的数字中翻译这个关键变量的字符。在示例x = 'afh'
中,与x = '123'
相同,因为A OR B OR C = 1,依此类推。
现在出现了复杂的部分:
当键变量x被翻译成数字时,每个字符单独出现,我也可以从结果中随机返回字符。例如:x = '123'
,然后我可以返回['a','e','f']
或['b','d','i']
等列表,尤其是在我使用random.choice()
时。从这一点来看,我无法弄清楚如何做到:
如何从变量I,II,III中将所有可能的变化附加到列表中。例如:
['adg','beh','cfi','aei','ceg',...]
我知道如何打印无休止的随机组合,但在这种情况下,我得到重复,我不想要它们。我想在列表中附加I,II和III之间的所有可能的变化,因为当它们被翻译成数字时,我可以从相应的序列中返回任何字符。好吧,我希望我的例子可以自我解释。我非常感谢你的关注!
I = 'abc' # 1
II = 'def' # 2
III = 'ghi' # 3
x = 'afh' # Random possibility: It could be an input.
L = []
LL = []
for i in range(len(x)):
if x[i] in I:
L.append(1)
if x[i] in II:
L.append(2)
if x[i] in III:
L.append(3)
for i in range(len(L)): # Here lies the mistery...
if L[i] == 1:
LL.append(I)
if L[i] == 2:
LL.append(II)
if L[i] == 3:
LL.append(III)
print L
print LL
输出结果为:
[1, 2, 3]
['abc', 'def', 'ghi']
答案 0 :(得分:1)
以下是我重写代码的方法。像你这样的陈述是一个很大的代码味道。我将序列放入元组并使用单个循环。我还用列表理解替换了第二个循环。
顺便说一句,如果你像一个明智的人一样使用基于零的索引,你也可以简化索引。
I = 'abc' # 1
II = 'def' # 2
III = 'ghi' # 3
x = 'afh' # Random possibility: It could be an input.
L = []
LL = []
lists = I, II, III
for c in x:
for i, seq in enumerate(lists):
if c in seq:
L.append(i+1)
LL = [lists[i-1] for i in L]
print L
print LL
另外,请务必查看itertools
模块,尤其是product
功能。目前尚不清楚您的意思,但产品会为您提供每个序列列表中项目的所有组合。
答案 1 :(得分:0)
非常感谢锑!答案正是来自itertools的product()。带有它的代码更加简单:
from itertools import *
I = 'abc' # 1
II = 'def' # 2
III = 'ghi' # 3
IV = product(I,II,III)
for i in IV:
print i
输出正是我想要的,每种可能的组合:
('a', 'd', 'g')
('a', 'd', 'h')
('a', 'd', 'i')
('a', 'e', 'g')
('a', 'e', 'h')
('a', 'e', 'i')
('a', 'f', 'g')
('a', 'f', 'h')
('a', 'f', 'i')
('b', 'd', 'g')
('b', 'd', 'h')
('b', 'd', 'i')
('b', 'e', 'g')
('b', 'e', 'h')
('b', 'e', 'i')
('b', 'f', 'g')
('b', 'f', 'h')
('b', 'f', 'i')
('c', 'd', 'g')
('c', 'd', 'h')
('c', 'd', 'i')
('c', 'e', 'g')
('c', 'e', 'h')
('c', 'e', 'i')
('c', 'f', 'g')
('c', 'f', 'h')
('c', 'f', 'i')
答案 2 :(得分:0)
python 3.2
[(i,v,c) for i in I for v in II for c in III]