用字符串枚举列表会给出错误的结果

Enumerating over list with strings gives wrong results

我惊讶地发现这两个没有输出相同的结果。这是为什么?

列表

numbers = ['01', '02', '03']
>>> for val in numbers:
...     print(val)
01
02
03

>>> for i, val in numbers:
...     print(val)
1
2
3

您将字符串解包为两部分。第一个分配给 i ,第二个分配给 val.

你正在做这样的事情:

i, val = '01'

改为尝试 python 中的 enumerate 进行枚举。

查看字节码:

>>> import dis
>>> def foo(): a,b = 'ds'
... 
>>> dis.dis(foo)
  1           0 LOAD_CONST               1 ('ds')
              2 UNPACK_SEQUENCE          2         # <---
              4 STORE_FAST               0 (a)
              6 STORE_FAST               1 (b)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE

第二个循环将每个字符串解压缩为两个字符。如果你想得到类似

的东西
i val
0 01
1 02
2 03

那么你应该使用 enumerate

for i, val in enumerate(numbers):
    print(i, val)

您无意中将字符串解压缩为 2 个变量:

a, b = "xy"
print(a)
print(b)
x
y

你真正想要的其实是enumerate他们:

for i, val in enumerate(numbers):
    print(val)
01
02
03

尝试枚举 for 循环

for i, val in enumerate(numbers):
    print(val)

当您在一个变量中获取列表的字符串元素时。它完全将该元素分配给一个变量。

numbers = ['01', '02', '03']
for val in numbers:
    print(val)

这里它给你 1,2,3 因为它把字符串分配给两个变量字节:

for i, val in numbers:
    print(val)
1
2
3

例如:

像这样,当你在做的时候

a,b = "89"
print('a =', a)
print('b =', b)

它returns a=8 和 b=9。我想你现在清楚了。