例如,假设我有一个列表['this', 'is', 'a', 'test']
,另一个列表为['i','t','t','a']
,我想生成['ihis', 'ts', 't', 'aest']
。我试图做一个for循环,但它不会让我删除任何东西,因为它是不可变的。
我试过了:
for i in list1: del i[0]
答案 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']