Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-在for中包含多个参数的列表理解_Python_List_List Comprehension - Fatal编程技术网

Python-在for中包含多个参数的列表理解

Python-在for中包含多个参数的列表理解,python,list,list-comprehension,Python,List,List Comprehension,我目前的理解是: ... cur = [[14, k, j] for j, k in rows[14], range(15)] ... 它给了我以下错误: ... cur = [[14, k, j] for j, k in rows[14], range(15)] ValueError: too many values to unpack 我将如何解决这个问题,非常感谢您的帮助。我只是不想写一个完整的for循环或者手工完成整个列表。谢谢D 额外信息: rows = [

我目前的理解是:

...
cur = [[14, k, j] for j, k in rows[14], range(15)]
...
它给了我以下错误:

...        
    cur = [[14, k, j] for j, k in rows[14], range(15)]
ValueError: too many values to unpack
我将如何解决这个问题,非常感谢您的帮助。我只是不想写一个完整的for循环或者手工完成整个列表。谢谢D

额外信息:

rows = [{1: '75'},
        {1: '95', 2: '64'}, 
        {1: '17', 2: '47', 3: '82'}, 
        {1: '18', 2: '35', 3: '87', 4: '10'}, 
        {1: '20', 2: '04', 3: '82', 4: '47', 5: '65'}, 
        {1: '19', 2: '01', 3: '23', 4: '75', 5: '03', 6: '34'}, 
        {1: '88', 2: '02', 3: '77', 4: '73', 5: '07', 6: '63', 7: '67'}, 
        {1: '99', 2: '65', 3: '04', 4: '28', 5: '06', 6: '16', 7: '70', 8: '92'}, 
        {1: '41', 2: '41', 3: '26', 4: '56', 5: '83', 6: '40', 7: '80', 8: '70', 9: '33'}, 
        {1: '41', 2: '48', 3: '72', 4: '33', 5: '47', 6: '32', 7: '37', 8: '16', 9: '94', 10: '29'}, 
        {1: '53', 2: '71', 3: '44', 4: '65', 5: '25', 6: '43', 7: '91', 8: '52', 9: '97', 10: '51', 11: '14'}, 
        {1: '70', 2: '11', 3: '33', 4: '28', 5: '77', 6: '73', 7: '17', 8: '78', 9: '39', 10: '68', 11: '17', 12: '57'}, 
        {1: '91', 2: '71', 3: '52', 4: '38', 5: '17', 6: '14', 7: '91', 8: '43', 9: '58', 10: '50', 11: '27', 12: '29', 13: '48'}, 
        {1: '63', 2: '66', 3: '04', 4: '68', 5: '89', 6: '53', 7: '67', 8: '30', 9: '73', 10: '16', 11: '69', 12: '87', 13: '40', 14: '31'}, 
        {1: '04', 2: '62', 3: '98', 4: '27', 5: '23', 6: '09', 7: '70', 8: '98', 9: '73', 10: '93', 11: '38', 12: '53', 13: '60', 14: '04', 15: '23'}]
您需要让它们像这样迭代:

cur = [[14, k, j] for j, k in zip(rows[14], range(15))]

扩展@jamylak的答案:或者您可以使用map

cur = [[14, k, j] for j, k in map(None,rows[14], range(15))]
这将在较短的列表中填充“无”。

要解释您的代码:

cur = [[14, k, j] for j, k in rows[14], range(15)]
同:

cur = [[14, k, j] for j, k in (rows[14], range(15))]
现在,我们更清楚地看到,您已经创建了一个
元组
,并且正在对其进行迭代。第一次通过循环时,元组放弃了
行[14]
,这是一个包含两个以上项的字典,因此无法将其解压为
j
k

正如
jamylak
所指出的,关键在于
zip

cur = [[14, k, j] for j,k in zip(rows[14],range(15))]
你可以把它想象成拉链:

zip(a,b) = [
   (a[0], b[0]),
   (a[1], b[1]),
   (a[2], b[2]),
   ...
   }

这样写出来的话,你会看到这个结构有点像拉链(拉链的左右两部分分别是
a
b
。拉链拉好后,你已经将左边的一个元素与右边的一个元素进行了匹配。当然,你传递给
zip
的对象不需要是可索引的(重要的是你可以迭代它们),你可以“压缩”超过2个iterable在一起…

压缩到底是什么?只是出于好奇。@EthanBrouwer我链接了它,基本上你只能在
for
循环中迭代一个iterable,要一次迭代两个,你需要使用
zip
生成一个iterable,返回每个索引处对应项的元组这是否意味着我也必须把(j,k)或者这不要紧吗?@ethanbrower你不必这么做,而且在风格上最好不要这样迭代。要理解这段极其神秘的代码,你必须理解1/zip接受iterables作为参数,2/在字典上迭代只返回键。
itertools.izip_longest
是更好的方法做that@mgilson哦,不!编辑:等等,不,它没有,只有
None
thing@jamylak--更正。使用
None
调用
map
在python3.x
rows[14]
中会消失,这是rows
列表中的最后一个
字典
,谢谢。这很有帮助(我想我应该仔细阅读)