我在使用for循环处理列表列表时遇到了一个问题,for循环将列表元素分配给变量,而不是使用列表索引
下面的代码正确地处理列表,并确认每个子列表有5个元素,所有元素都是string类型,并且都有数据:
for i, rec in enumerate(Wordpress_Post_List):
if i < 5:
if i == 0:
print(type(rec), ' --> ', len(rec))
print('record ',i)
print('0==', type(rec[0]), '==', rec[0])
print('1==', type(rec[1]), '==', rec[1])
print('2==', type(rec[2]), '==', rec[2])
print('3==', type(rec[3]), '==', rec[3])
print('4==', type(rec[4]), '==', rec[4])
但当我使用以下代码时:
for i, rec in enumerate(Wordpress_Post_List):
if i < 5:
for li0,li1,li2,li3,li4 in rec:
print('0==', type(li0), '==', li0)
print('1==', type(li1), '==', li1)
print('2==', type(li2), '==', li2)
print('3==', type(li3), '==', li3)
print('4==', type(li4), '==', li4)
我得到错误:ValueError:没有足够的值来解包(预期值为5,实际值为2)
任何关于Python为什么要这样做的见解都将不胜感激
另外,以下代码也适用
for i, rec in enumerate(Wordpress_Post_List):
if i < 5:
li0=rec[0]
li1=rec[1]
li2=rec[2]
li3=rec[3]
li4=rec[4]
print('0==', type(li0), '==', li0)
print('1==', type(li1), '==', li1)
print('2==', type(li2), '==', li2)
print('3==', type(li3), '==', li3)
print('4==', type(li4), '==', li4)
您在
rec
上迭代,因此rec
中的每个单个值都被分配给5个变量。这些值中至少有一个本身是序列(可能是字符串),只有2个元素长,2个元素不能分配给5个变量例如,如果
Wordpress_Post_List
中的第一个条目是5个字符串的列表:然后
for
循环接受'on'
,并将其分配给for
循环目标。将目标设置为li0,li1,li2,li3,li4
,由于字符串也是序列,Python尝试将字符'o'
和'n'
分配给5个变量名。这不起作用,所以你得到了你的特殊例外:不要使用另一个
for
循环,只需对这5个名称使用赋值:您可以使用^{} function 对象将迭代限制在前5行,而不是使用
enumerate()
和针对i
的测试。因为您知道前五个条目都有5个元素,所以可以在外循环中使用解包:您的代码正在尝试解压每个迭代
for (unpack,my,data,structure) in iterable_of_data_structures:
for li0,li1,li2,li3,li4 in rec:
这要求在
rec
的每次迭代中有5个值;但是,我们可以从前面的代码中看到,rec
中总共有5个值无需迭代即可解包:
(li0, li1, li2, li3, li4) = rec
相关问题 更多 >
编程相关推荐