【问题标题】:List Enumeration in PythonPython中的列表枚举
【发布时间】:2017-10-28 01:42:57
【问题描述】:

下面的 sn-p 来自代码跟踪练习。

import copy

def ct1(A, B, C, D, E):
    result = [ ]
    # 0 1 2 3 4 5 6 7 8 9
    pairs = [(A,B),(A,C),(A,D),(A,E),(B,C),(B,D),(B,E),(C,D),(C,E),(D,E)]
    for i,pair in enumerate(pairs):
        (L, M) = pair
        if (L is M): result.append(i)
        elif (L == M): result.append(10*i)

    return result
def f(L):
    L[0] += 1
    return L

A = list(range(3))
B = copy.copy(A)
C, D, E = A, B+[ ], f(B)
print(ct1(A, B, C, D, E))

我感到困惑的部分是 for 循环中使用的枚举。从enumerate() 的文档看来,pair 应该具有如下值:

(0, ([0, 1, 2], [1, 1, 2]))
(1, ([0, 1, 2], [0, 1, 2]))
(2, ([0, 1, 2], [0, 1, 2]))
(3, ([0, 1, 2], [1, 1, 2]))
(4, ([1, 1, 2], [0, 1, 2]))
(5, ([1, 1, 2], [0, 1, 2]))
(6, ([1, 1, 2], [1, 1, 2]))
(7, ([0, 1, 2], [0, 1, 2]))

在迭代期间,这意味着'L' 的值应该从07'M',元组([0, 1, 2], [1, 1, 2])([0, 1, 2], [0, 1, 2])。但是,当我通过调试器运行此代码时,我看到 LM 都是列表。例如,当i = 0, L = [0, 1, 2] and M = [1, 1, 2] 等等。有人可以解释一下发生了什么吗?

【问题讨论】:

  • 继续阅读unpacking,来自enumerate() 的元组已被解压缩为ipair。你可以嵌套解包,所以你可以写for i, (L, M) in enumerate(pairs):而不需要pair
  • 现在对我有意义!感谢您的帮助。

标签: python list enumerate


【解决方案1】:

for i,pair in enumerate(pairs): 行,i 获取列表 pairs 中的索引值并从 0 到 9,而 pair 则一一获取列表 pairs 中的值。所以对于i = 0pair([0, 1, 2], [1, 1, 2])。然后你调用(L, M) = pair 这意味着L 获得第一个列表,而M 获得第二个列表。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    当然LM 是列表。如果你跑

    pairs = [(A,B),(A,C),(A,D),(A,E),(B,C),(B,D),(B,E),(C,D),(C,E),(D,E)]
    for i, pair in enumerate(pairs):
        print(i, pair)
    

    你会得到想要的结果。所以你要找的元组保存在pairs。随着线

    # ...
    (L, M) = pair
    # ...
    

    您将pair 引用的元组拆分为其元素,在第一次迭代中,它们是AB 引用的两个列表。

    上面的行本质上意味着

    (L, M) = (A, B)
    

    相当于

    L, M = A, B
    

    这反过来意味着“将A分配给L并将B分配给M”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-31
      • 2015-08-08
      • 1970-01-01
      • 2022-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多