用字符串枚举列表会给出错误的结果
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。我想你现在清楚了。
我惊讶地发现这两个没有输出相同的结果。这是为什么?
列表
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。我想你现在清楚了。