使用列表项作为列表推导中的值

时间:2015-05-14 18:26:49

标签: python

我有一个这样格式的列表:

com = ['eto', 'eti', 'etn', 'ets', 'eot', 'eoi', 'eon', 'eos', 'eit', 'eio', 'ein']

然后在程序中我需要对每个单元格中的每个字符执行3次不同的计算。

newC = [w.replace(mCommon[0], com[e]) for w in newC]
newC = [w.replace(mCommon[0], com[t]) for w in newC]
newC = [w.replace(mCommon[0], com[o]) for w in newC]

下一次

newC = [w.replace(mCommon[0], com[e]) for w in newC]
newC = [w.replace(mCommon[0], com[t]) for w in newC]
newC = [w.replace(mCommon[0], com[i]) for w in newC]

等等,在一个循环中,所以我不对这些字符进行硬编码,它们应该从列表中获取。

基本上我希望这三个列表推导循环遍历每个组合,例如第一次分别使用'e','t'和'o',然后分别使用'e','t'和'i'等等上。

由于显而易见的原因,我现在得到的是指数超出范围。 m部分也不正确,因为它不会改变。

2 个答案:

答案 0 :(得分:1)

您不必编写三个列表理解。循环遍历list,然后遍历每个字符以将它们中的每一个用作replace参数。

for element in list: #element in be 'eto', then 'eti' ...
    for character in element: # character will be 'e','t','i' then 'e','t','o'...
        newC = [w.replace(mCommon[0], character) for w in newC]

请注意,上面的代码假定newC已存在于代码中的某处。

答案 1 :(得分:1)

如果你想要一个功能:

newC = [w.replace(mCommon[0], 'e') for w in newC]
newC = [w.replace(mCommon[0], 't') for w in newC]
newC = [w.replace(mCommon[0], 'o') for w in newC]
在第一个电话中

并且:

newC = [w.replace(mCommon[0], 'e') for w in newC]
newC = [w.replace(mCommon[0], 't') for w in newC]
newC = [w.replace(mCommon[0], 'i') for w in newC]

在第二个电话中你可以写:

com = ['eto', 'eti', 'etn', 'ets', 'eot', 'eoi', 'eon', 'eos', 'eit', 'eio', 'ein']
g_com_index = 0

def adapt_c(newC):
    global g_com_index
    for c in com[g_com_index % len(com)]
        newC = [w.replace(mCommon[0], c) for w in newC]
    g_com_index += 1

    return newC