Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中迭代列表列表_Python_Nested Lists - Fatal编程技术网

在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)']]