【问题标题】:How to group list items into tuple? [duplicate]如何将列表项分组为元组? [复制]
【发布时间】:2013-02-22 09:07:12
【问题描述】:

我有一个数字列表,如何将每个 n 数字分组为一个元组?

例如,如果我有一个列表a = range(10),并且我想将每 5 个项目分组为一个元组,那么:

b = [(0,1,2,3,4),(5,6,7,8,9)]

我该怎么做?如果len(a) 不是n 的整数倍,我也想提出一个错误。

【问题讨论】:

标签: python list tuples


【解决方案1】:
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [tuple(a[i:i+5]) for i in range(0, len(a), 5)]
[(0, 1, 2, 3, 4), (5, 6, 7, 8, 9)]

【讨论】:

    【解决方案2】:
    In [18]: def f(lst,n):    
        ...:     if len(lst)%n != 0:
        ...:         raise ValueError("{} is not a multiple of {}".format(len(lst),n))
        ...:     return zip(*[iter(lst)]*n)
    
    In [19]: lst = range(10)
    
    In [20]: f(lst,5)
    Out[20]: [(0, 1, 2, 3, 4), (5, 6, 7, 8, 9)]
    
    In [21]: f(range(9),5)
    ---------------------------------------------------------------------------
    ValueError                                Traceback (most recent call last)
    <ipython-input-21-814a68e0035f> in <module>()
    ----> 1 f(range(9),5)
    
    <ipython-input-18-3ca911a04fd3> in f(lst, n)
          1 def f(lst,n):
          2     if len(lst)%n != 0:
    ----> 3         raise ValueError("{} is not a multiple of {}".format(len(lst),n))
          4     return zip(*[iter(lst)]*n)
    
    ValueError: 9 is not a multiple of 5
    

    【讨论】:

    • 这看起来很棒!谢谢!虽然我不确定zip(*[iter(lst)]*n) 是如何工作的......
    • @LWZ -- 如果您通读 cmets 中链接的问题,您会发现实际拆分的不同实现以及相应的讨论...
    【解决方案3】:

    确定 N 是您的组长度

    if (len(your_list)%n==0):
        wish_list = [ tuple(your_list[i:i+N]) for i in range(0, len(your_list), N) ]
    else:
        raise Exception("not divisible by N")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-20
      • 2014-03-19
      • 2015-09-24
      • 2020-08-24
      • 2021-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多