如何替换列表中的子列表?

时间:2017-02-01 01:41:39

标签: python

我有一份清单。此列表包含子列表。每个子列表都包含一个字符串。我想将.replace()应用于这些字符串以更改字母。

mylist = [["aus"],["ausser"],["bei"],["mit"],["noch"],["seit"],["von"],["zu"]]

for sublist in mylist:
    sublist = [stuff.replace("s", "Q") for stuff in sublist]
print(mylist)

但它只返回原始列表。它应该返回

[["auQ"],["auQQer"],["bei"],["mit"],["noch"],["Qeit"],["von"],["zu"]]

问题

为什么我的代码不会改变我的子列表,即使我在for循环中重新定义它们?

4 个答案:

答案 0 :(得分:3)

感谢@Hamms的评论:

  原来不起作用的原因是因为当它分配时   新列表到子列表,它只是覆盖对子列表的引用   由for循环提供,而不是子列表本身。

此方法有效,因为它创建了一个全新的列表,而不是尝试修改原始列表:

mylist = [["aus"],["ausser"],["bei"],["mit"],["noch"],["seit"],["von"],["zu"]]
final = [j.replace("s", "Q") for k in mylist for j in k] 
print(final)

输出:

['auQ', 'auQQer', 'bei', 'mit', 'noch', 'Qeit', 'von', 'zu']

或者您可以这样做以获得所需的输出:

mylist = [["aus"],["ausser"],["bei"],["mit"],["noch"],["seit"],["von"],["zu"]]
final = [[j.replace("s", "Q")] for k in mylist for j in k] 
print(final)

输出:

[['auQ'], ['auQQer'], ['bei'], ['mit'], ['noch'], ['Qeit'], ['von'], ['zu']]

答案 1 :(得分:2)

你可以在一个班轮中做到这一点:

[[s.replace("s", "Q")] for l in mylist for s in l]
[['auQ'], ['auQQer'], ['bei'], ['mit'], ['noch'], ['Qeit'], ['von'], ['zu']]

但发生这种情况的原因是因为您反复创建新变量sublist而不是分配给现有子列表。如果您想使用您的方法,请尝试以下方法:

for l in mylist:
    l[0] = l[0].replace("s", "Q")

print(mylist)
[['auQ'], ['auQQer'], ['bei'], ['mit'], ['noch'], ['Qeit'], ['von'], ['zu']]

此处,子列表已就地修改(而不是创建新的修改后的子列表),而后者又会修改原始列表。

答案 2 :(得分:1)

使用map的替代方案:

mylist = [["aus"],["ausser"],["bei"],["mit"],["noch"],["seit"],["von"],["zu"]]

secondList = list(map(lambda l: [l[0].replace('s', 'Q')], mylist)) # python 3
#secondList = map(lambda l: [l[0].replace('s', 'Q')], mylist) # python 2

>>> mylist
[['aus'], ['ausser'], ['bei'], ['mit'], ['noch'], ['seit'], ['von'], ['zu']]
>>> secondList
[['auQ'], ['auQQer'], ['bei'], ['mit'], ['noch'], ['Qeit'], ['von'], ['zu']]

答案 3 :(得分:0)

您可以使用

    mylist = [["aus"],["ausser"],["bei"],["mit"],["noch"],["seit"],["von"],["zu"]]

    for i in range(0,len(mylist)):
    mylist[i] = [stuff.replace("s", "Q") for stuff in mylist[i]]
    print(mylist)