Python 用数字附加序列中的所有可能性

Python 用数字附加序列中的所有可能性,python,append,sequence,Python,Append,Sequence,我有一个问题困扰着我的大脑。让我们假设变量I存储一个序列,变量II存储另一个序列,变量III存储另一个序列。变量1将表示数字1、下一个2和下一个3;然后我有另一个关键变量,它有这3个序列的随机字符。鉴于这一事实,我可以很容易地将这个关键变量的字符翻译成相应的数字。在示例中,x='afh',than,表示x='123',这是相同的,因为A或B或C=1,依此类推 现在是复杂的部分: 当关键变量x被转换成数字时,每个字符都是单独的,我还可以从结果中随机返回字符。例如:x='123',然后我可以返回类似

我有一个问题困扰着我的大脑。让我们假设变量I存储一个序列,变量II存储另一个序列,变量III存储另一个序列。变量1将表示数字1、下一个2和下一个3;然后我有另一个关键变量,它有这3个序列的随机字符。鉴于这一事实,我可以很容易地将这个关键变量的字符翻译成相应的数字。在示例中,
x='afh'
,than,表示
x='123'
,这是相同的,因为A或B或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']

下面是我将如何重写您的代码。像您这样冗长的if语句是一种巨大的代码气味。我将序列放入一个元组,并使用一个循环。我还用列表替换了第二个循环

顺便说一句,如果你像一个明智的人一样使用基于零的索引,你也可以简化索引

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会为您提供序列列表中每个项目的所有组合。

非常感谢您!答案正是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')

更多关于“所有可能性”的例子?我理解从x到
[1,2,3]
的翻译,反之亦然。非常感谢!我会查出来:)。我一直在尝试着不导入任何东西,真的很困惑。很有趣!!!我会花一些时间来完全理解你重写代码的高级方法,真的很好!非常感谢。我会查清楚的。。
    python 3.2


    [(i,v,c) for i in I for v in II for c in III]