用python中的字符串替换索引列表

时间:2015-11-21 01:20:43

标签: python list

我在列表中有一组索引:

[2 0 3 4 5]

我想用另一个列表中存储的值替换它们:

[a b c d e f g]

输出:

[c a d e f]

我试过这段代码:

for line in indices:
    print(line)
    for value in line:
        value = classes[value]
    print(line)
    break

两次打印原始列表。有没有办法替换元素,还是我被迫创建一个新的列表列表?

3 个答案:

答案 0 :(得分:3)

这看起来像是一个使用列表理解的好地方,试试这个 - 惯用的解决方案:

idxs  = [2, 0, 3, 4, 5]
chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

[chars[i] for i in idxs]
=> ['c', 'a', 'd', 'e', 'f']

当然,我们可以使用您想要的显式循环来做同样的事情,但它并不像以前的解决方案那样酷:

ans = []
for i in idxs:
    value = chars[i]
    ans.append(value)

ans
=> ['c', 'a', 'd', 'e', 'f']

作为最后的选择 - 我不知道为什么你要"替换元素"在输入列表中(如问题中所述),但确定,这也是可能的,但不建议 - 只需创建一个带答案的新列表就更简单,更清晰(如图所示)以前的片段),而不是更改原始输入:

for pos, val in enumerate(idxs):
    idxs[pos] = chars[val]

idxs
=> ['c', 'a', 'd', 'e', 'f']

答案 1 :(得分:1)

idxs  = [2, 0, 3, 4, 5]
chars = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
map(lambda x : chars[x],idxs)
=> ['c', 'a', 'd', 'e', 'f']

或者

reduce(lambda x,y: x+[chars[y]],idxs,[])
=> ['c', 'a', 'd', 'e', 'f']

答案 2 :(得分:0)

你也可以使用chr()函数将int转换为字符(ascii table)

>>> a = [2 0 3 4 5]
>>> [chr(i+97) for i in a]
['c', 'a', 'd', 'e', 'f']