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

2024-09-30 16:22:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题正在消耗我的大脑。假设变量I存储一个序列,变量II存储另一个序列,变量III存储另一个序列。变量1将代表数字1,下一个2和下一个3;然后我有另一个键变量,它具有这3个序列的随机字符。考虑到这个事实,我可以很容易地将这个关键变量的字符翻译成相应的数字。在这个例子中,x = 'afh',than,也就是说x = '123',因为A或B或C=1,依此类推。在

现在是复杂的部分:

当键变量x被转换成数字时,每个字符都是单独的,我也可以从结果中随机返回字符。例如:x = '123',那么我可以返回一个列表,比如['a','e','f'],或者{},特别是如果我使用random.choice()。由此,我还不知道该怎么做:

如何将变量I、II、III的所有可能的变化附加到列表中。例如:

['adg','beh','cfi','aei','ceg',...]

我知道如何打印无休止的随机组合,但在这种情况下,我会重复,我不想要它们。我想把I,II和III之间所有可能的变化都加到一个列表中,因为当它们被转换成数字时,我可以从相应的序列中返回任何字符。我希望我的例子是可以自我解释的。非常感谢大家的关注!在

^{pr2}$

输出为:

^{3}$

Tags: 列表代表序列数字字符例子关键事实
3条回答

下面是我如何重写你的代码。像你这样冗长的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

输出结果正是我想要的,所有可能的组合:

^{pr2}$
    python 3.2


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

相关问题 更多 >