0

我有一个问题正在消耗我的大脑。假设变量 I 存储一个序列,变量 II 存储一个序列,变量 III 也存储一个序列。变量 one 将代表数字 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']
4

3 回答 3

1

以下是我将如何重写您的代码。像你这样的冗长的 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功能。目前尚不清楚您的意思,但是 product 为您提供了每个序列列表中的项目的所有组合。

于 2012-12-28T05:23:46.117 回答
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')
于 2012-12-28T05:51:21.093 回答
0
    python 3.2


    [(i,v,c) for i in I for v in II for c in III]
于 2012-12-28T05:58:12.380 回答