如何将列表项分组为元组? [复制]
Posted
技术标签:
【中文标题】如何将列表项分组为元组? [复制]【英文标题】: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
的整数倍,我也想提出一个错误。
【问题讨论】:
看看 itertools.grouper 配方... ***.com/questions/434287/… ***.com/q/312443/1217270 【参考方案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")
【讨论】:
以上是关于如何将列表项分组为元组? [复制]的主要内容,如果未能解决你的问题,请参考以下文章