在Python中迭代列表列表
我有一份清单:在Python中迭代列表列表,python,nested-lists,Python,Nested Lists,我有一份清单: lst1 = [["(a)", "(b)", "(c)"],["(d)", "(e)", "(f)", "(g)"]] 我想迭代每个元素并对它们执行一些字符串操作,例如: replace("(", "") 我尝试使用以下方法对列表进行迭代: for l1 in lst1: for i in l1: lst2.append(list(map(str.replace("(", ""), l1))) 我希望输出结果与列表的原始列表相同,但没有括号。另外,我正在
lst1 = [["(a)", "(b)", "(c)"],["(d)", "(e)", "(f)", "(g)"]]
我想迭代每个元素并对它们执行一些字符串操作,例如:
replace("(", "")
我尝试使用以下方法对列表进行迭代:
for l1 in lst1:
for i in l1:
lst2.append(list(map(str.replace("(", ""), l1)))
我希望输出结果与列表的原始列表相同,但没有括号。另外,我正在寻找一种编辑列表列表的方法,而不是这个问题的具体解决方案
谢谢,编辑:
是的,如果您想:
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
使用:
[:]
将保持列表对象不变。我刚才做了您所做的,我使用了一个事实,列表的每个元素都可以被分配一个新的(或更新的)值:
编辑
这就是你如何处理你在评论中提到的“真正的问题”:
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](下一个元组(作为列表))下次的值为[12.22,12.122,0.000])
然后我遍历“b”(转换为列表的元组)中的每个元素,并使用递增运算符(+=,-=,/=,*=)将该元组中的每个元素乘以一个数字。完成此循环后,我将主列表“a”中的相同位置设置为之前转换的元组的元组。<如果这没有意义,我要说的是,初始元组将转换为列表(然后继续操作),然后再转换回元组(因为您希望它以与以前相同的格式结束)
希望这有帮助!是的,如果您只想制作一行程序,列表理解在这方面很有用。虽然您在技术上仍然使用嵌套for循环,但基于@user3263488的使用方式,我的解决方案是正确的thinking@Ol可靠-好吧,我将添加一个使用normal for循环的解决方案uld在大多数情况下都能正常工作。我喜欢这种方法。现在是一个真正的问题。我想选择一个不同的列表。一个XYZ坐标如下:[(12.22,12.122,0.000)],[(1232.11,123.1231,0.000)]].有没有办法嵌套一些操作?我想去掉括号和逗号,然后将每个坐标乘以一个数字,然后像以前一样重新组合起来。有什么想法吗?这可能就是为什么我想使用for循环,因为我可以在一行中执行多个操作。对吗?你说的“去掉…逗号”是什么意思?元素仍然需要逗号。您可以在lst1中为L使用
:在枚举(L)中为i,x使用:L[i]=x.replace((“,”)
而不是range()
是的,你是对的,有很多方法可以解决这个问题,我只是用他的思维方式来回答。就我个人而言,我会像@user3263488那样做。在我之前的评论中,我指的是用户@iCodez@Ol“这工作很好。你能帮我一步一步地把它分解吗?我知道这要求很多,但我想了解了解代码的每个部分都发生了什么,而不仅仅是复制您的解决方案。非常感谢!range(0,len(lst1))
是多余的,range(len(lst1))
就足够了
>>> 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)']]
[(122.2, 121.22, 0.0), (12321.099999999999, 1231.231, 0.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)']]