【问题标题】:Looping a list of lists, while accessing each elements easily循环列表列表,同时轻松访问每个元素
【发布时间】:2020-10-06 01:14:21
【问题描述】:

如果之前已经回答过,我提前道歉,我不知道要搜索什么。

说,我想遍历一个看起来像这样的列表:

x = [[a, b, c], [a, b, c], ...]

我发现我可以这样做以轻松访问该结构内的列表:

for [a, b, c] in x:
        doSomethingToElements(a,b,c)

我想做的是:

for [a, b, c] as wholeList in x:
        doSomethingToElements(a,b,c)
        doSomethingToWholeLists(wholeList)

但是,该语法无效,是否有任何等效的方法可以做到这一点,这是正确且有效的? 或者我应该像here 所说的那样使用enumerate() 吗?

编辑:努力使enumerate() 工作,我意识到我可以做到这一点:

for idx, [a, b, c] in enumerate(x):
        doSomethingToElements(a,b,c)
        doSomethingToWholeLists(x[idx])

但请随意发布更优雅的解决方案,或者它是否足够优雅以至于无关紧要?

【问题讨论】:

    标签: python-3.x list for-loop


    【解决方案1】:

    有两种选择。 第一个是使用zip 一起迭代元素和列表,第二个是迭代列表并分配每个值。

    x = [[1, 2, 3], [4, 5, 6]]
    for (a, b, c), z in zip(x, x):
        print(a, b, c, z)
    
    for z in x:
        a, b, c = z
        print(a, b, c, z)
    

    【讨论】:

    • 我不确定 zip 解决方案,但是是的,第二个很简单,我喜欢它
    • 我觉得这是一个足够好的解决方案,很简单,因此我授予您接受的答案徽章。此外,对于遇到此问题但不需要使用所有三个 a,b,c 元素的任何未来有抱负的开发人员,您可以将 _ 用于不必要的元素
    【解决方案2】:

    实际上并没有任何类似于该建议的语法。你最好的选择是splat-unpacking:

    for wholeList in x:
        doSomethingToElements(*wholeList)
        doSomethingToWholeLists(wholeList)
    

    【讨论】:

    • 我猜这只有在你通过函数时才有效,对吧?如果我想在没有函数的情况下就地操作 a、b 或 c 怎么办?
    • 它适用于其他一些情况,例如padded_wholeList = ["pre", *wholeList, "post"],但函数调用语法是最常见的用法。如果你想要循环中的局部变量,只需分配它们:a, b, c = wholeList
    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2020-11-14
    • 2012-08-31
    • 1970-01-01
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多