Python替换列表的每个元素中的第一个字符

时间:2018-04-02 01:09:51

标签: python python-3.x

例如,假设我有一个列表['this', 'is', 'a', 'test'],另一个列表为['i','t','t','a'],我想生成['ihis', 'ts', 't', 'aest']。我试图做一个for循环,但它不会让我删除任何东西,因为它是不可变的。

我试过了:

for i in list1: del i[0]

4 个答案:

答案 0 :(得分:2)

你可以使用这样的列表理解来做到这一点:

test_list = ['this', 'is', 'a', 'test']

first_letters = ['i','t','t','a']

[letter+word[1:] for letter, word in zip(first_letters, test_list)]

# ['ihis', 'ts', 't', 'aest']

zip函数实际上创建了这个元组列表(它实际上是元组的迭代器,但为了简单起见,它可以被认为是一个列表):< / p>

[('i', 'this'), ('t', 'is'), ('t', 'a'), ('a', 'test')]

列表推导迭代,返回一个新列表,其中包含letter(每个元组的第一个元素)以及从word的第二个字母开始的所有字母(元组的第二个元素)

如果您更喜欢这种语法,它基本上等同于以下循环:

result = []

for letter, word in zip(first_letters, test_list):
    result.append(letter+word[1:])

答案 1 :(得分:1)

是的,字符串在Python中是不可变的。这意味着您必须构建一个 new 字符串来替换旧字符串。并且您必须将新字符串存储在原始列表中或新列表中。

如果要将它们存储回原始列表,则需要索引和值:

for idx, i in enumerate(list1):
    list[idx] = i[1:]

如果您想创建一个新列表,只需append他们进来,或使用理解:

list2 = []
for i in list1:
    list2.append(i[1:])

list2 = [i[1:] for i in list1]

通常创建一个新列表更好(这就是为什么Python只有一个语法快捷方式),但有时候就地变异更好(这就是为什么那个不太冗长或者更难)。问题是:如果任何其他代码段已经对list1进行了另一个引用,您是否希望它看到更改后的版本或原始版本?

答案 2 :(得分:0)

你可以尝试范围方法:

test_list = ['this', 'is', 'a', 'test']

first_letters = ['i','t','t','a']



print([first_letters[i]+test_list[i][1:]for i in range(len(test_list))])

输出:

['ihis', 'ts', 't', 'aest']

答案 3 :(得分:-1)

x = ['this', 'is', 'a', 'test']
y = ['i','t','t','a']
z = [y + x[1:] for x, y in zip(x, y)]
print(z)

z = ['ihis','ts','t','aest']