迭代Python中的列表列表

kon*_*rad 3 python nested-lists

我有一份清单清单:

lst1 = [["(a)", "(b)", "(c)"],["(d)", "(e)", "(f)", "(g)"]]
Run Code Online (Sandbox Code Playgroud)

我想迭代每个元素并对它们执行一些字符串操作,例如:

replace("(", "")
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法迭代列表:

for l1 in lst1:
   for i in l1:
       lst2.append(list(map(str.replace("(", ""), l1)))
Run Code Online (Sandbox Code Playgroud)

我希望out结果与原始列表列表相同但没有括号.此外,我正在寻找一种编辑列表列表的方法,而不是这个问题的具体解决方案.

谢谢,

iCo*_*dez 8

编辑:

是的,如果你想:你应该使用普通的for循环:

  1. 对每个子列表中包含的每个项目执行多个操作.

  2. 将主列表和子列表保持为相同的对象.

以下是如何执行此操作的简单演示:

main = [["(a)", "(b)", "(c)"], ["(d)", "(e)", "(f)", "(g)"]]

print id(main)
print id(main[0])
print id(main[1])
print

for sub in main:
    for index,item in enumerate(sub):

        ### Preform operations ###
        item = item.replace("(", "")
        item = item.replace(")", "")
        item *= 2

        sub[index] = item  # Reassign the item

print main
print
print id(main)
print id(main[0])
print id(main[1])
Run Code Online (Sandbox Code Playgroud)

输出:

25321880
25321600
25276288

[['aa', 'bb', 'cc'], ['dd', 'ee', 'ff', 'gg']]

25321880
25321600
25276288
Run Code Online (Sandbox Code Playgroud)

使用嵌套列表理解:

>>> lst1 = [["(a)", "(b)", "(c)"],["(d)", "(e)", "(f)", "(g)"]]
>>> id(lst1)
35863808
>>> lst1[:] = [[y.replace("(", "") for y in x] for x in lst1]
>>> lst1
[['a)', 'b)', 'c)'], ['d)', 'e)', 'f)', 'g)']]
>>> id(lst1)
35863808
>>>
Run Code Online (Sandbox Code Playgroud)

[:]将保持列表对象相同.