首页 文章

为什么我不允许在python中为每个具有不同列表长度的循环分配多个赋值

提问于
浏览
0

就像我被允许这样做:

(编辑 - 我也不允许这样做,抱歉搞砸了,但无论如何我想我的问题更多的是如何在循环中进行并行分配)

for (x,i) in ([0,1,2],[3,4,5]):
  # do something

为什么我不允许在每个循环中执行此操作(不同的列表长度)

for (x,i) in ([4,6,5,7,8,9],[1,2,3]):
   # do something

我知道你得到一个“ValueError:解压缩的值太多了”,但是当我完成迭代时,为什么循环不会停止?

真正使用这个就是我想做的事情

for (keys,i) in (sorted(dic.keys(),key=custom_sort), range(10)):
  print dic[keys]

我正在排序字典以及只打印前10个顶级结果(假设字典有数百个键) - 我只想要前10个结果 .

既然不允许这种语法,那么下一个最好的做法是什么呢?

谢谢

5 回答

  • 1

    你不能在第一个例子中做你做的事 - 它给出了完全相同的错误 . 所以错误不是来自不同长度的列表 .

    我想你的意思是:

    for (x,i) in zip([0,1,2],[3,4,5]):
    

    它与不同长度的列表一样有效

    >>> for x, i in zip([4,6,5,7,8,9],[1,2,3]):
    ...   print x, i
    ... 
    4 1
    6 2
    5 3
    
  • 2

    对于这种东西,itertools是你的朋友 .

    在你的情况下,itertools.islice()会做的伎俩:

    import itertools
    for key in itertools.islice(sorted(dict.keys(), key=custom_sort), 10):
        # Only the first 10 keys are processed.
    

    或者,如果您还需要索引,请使用 zipitertools.izip

    for i, key in zip(range(10), sorted(dict.keys(), key=custom_sort)):
        # i will be 0, 1, ..., 9
    
  • 2
    for (x,i) in ([0,1,2],[3,4,5]):
        # do something
    

    raise

    ValueError: too many values to unpack
    

    看起来你正试图这样做:

    >>> import itertools as i
    >>> first,second = [4,6,5,7,8,9],[1,2,3]
    >>> for x,i in i.izip(first, second):
    ...     print x, i
    ... 
    4 1
    6 2
    5 3
    

    看看itertools,特别是izip() . 其中有很多善良......例如 islice() 函数,Ferdinand Beyer's answer和其他recipes .

  • 0

    你不被允许这样做:

    for (x,i) in ([0,1,2],[3,4,5]):
      # do something
    
  • 1

    for 遍历容器中的元素 . 每个元素都是一个包含两个以上元素的列表 .

    试试这个:

    (x, y) = ([0, 1, 2], [3, 4, 5])
    

    这是你想要的 . 不需要 for .

    请注意,您声明的第一个示例实际上并不存在 . 你做不到:

    for (x, y) in ([0, 1, 2], [3, 4, 5]):
        pass
    

    你得到同样的错误 .

相关问题