我有一份清单清单:
lst1 = [["(a)", "(b)", "(c)"],["(d)", "(e)", "(f)", "(g)"]]
我想迭代每个元素并对它们执行一些字符串操作,例如:
replace("(", "")
我尝试使用以下方法迭代列表:
for l1 in lst1:
for i in l1:
lst2.append(list(map(str.replace("(", ""), l1)))
我希望out结果与原始列表列表相同但没有括号。此外,我正在寻找一种编辑列表列表的方法,而不是这个问题的具体解决方案。
谢谢,
答案 0 :(得分:8)
修改强>
是的,如果你想要,你应该使用普通的for循环:
对每个子列表中包含的每个项目执行多项操作。
将主列表和子列表保持为相同的对象。
以下是如何执行此操作的简单演示:
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])
输出:
25321880
25321600
25276288
[['aa', 'bb', 'cc'], ['dd', 'ee', 'ff', 'gg']]
25321880
25321600
25276288
>>> 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
>>>
[:]
将使列表对象保持不变。
答案 1 :(得分:0)
我刚刚做了你所做的事情,我使用的事实是列表的每个元素都可以分配一个新的(或更新的)值:
>>> lst1 = [["(a)", "(b)", "(c)"],["(d)", "(e)", "(f)", "(g)"]]
>>> for x in range(len(lst1)):
for y in range(len(lst1[x])):
lst1[x][y] = lst1[x][y].replace("(", "")
>>> lst1
[['a)', 'b)', 'c)'], ['d)', 'e)', 'f)', 'g)']]
修改强>
这就是你如何解决"真正的问题"你在评论中提到的那样:
a = [[(12.22, 12.122, 0.000)], [(1232.11, 123.1231, 0.000)]]
some_num = 10
for x in range(len(a)):
b = list(a[x][0])
for y in range(len(b)):
b[y] *= some_num
a[x] = tuple(b)
print(a)
输出:
[(122.2, 121.22, 0.0), (12321.099999999999, 1231.231, 0.0)]
^所有元素都乘以数字并保留原始格式
这是它的工作原理:
所以你有最初的清单' a'它有两个子列表,每个子列表只有一个元素(包含x,y,z坐标的元组)。我通过列表' a'并将元组列为一个列表并将它们设置为等于' b' (所以第四行的值第一次为[12.22,12.122,0.000](以及下一次的下一个元组(作为列表))。
然后我浏览了' b'中的每个元素。 (元组转换为列表)并使用增量运算符(+ =, - =,/ =,* =)将该元组中的每个元素乘以数字。完成此循环后,我在主列表中设置相同的位置' a'等于先前转换的元组的元组。 <如果这没有意义,我所说的是初始元组被转换为列表(然后进行操作),然后转换回元组(因为你希望它以相同的格式结束)和以前一样)。
希望这有帮助!
答案 2 :(得分:0)
>>> lst1 = [["(a)", "(b)", "(c)"],["(d)", "(e)", "(f)", "(g)"]]
>>> [[j.strip('()') for j in i] for i in lst1]
[['a', 'b', 'c'], ['d', 'e', 'f', 'g']]
>>> [[j.lstrip('(') for j in i] for i in lst1]
[['a)', 'b)', 'c)'], ['d)', 'e)', 'f)', 'g)']]