【问题标题】:Create groups of N items from a list?从列表中创建 N 个项目的组?
【发布时间】:2022-01-06 13:50:36
【问题描述】:

有一个包含许多项目的列表。下面只是一个例子:

example = ['Ireland',
 '324',
 '437',
 'Germany',
 '376',
 '431',
 'Canada',
 '387',
 '231']

如何创建一个 tuple,每个元素有 N 个元素,所以它变成:

[('Ireland', '324', '437'),
 ('Germany', '376', '431'),
 ('Canada', '387', '231')]

我正在尝试寻找不同的方法来做到这一点,以更好地理解语言。

到目前为止,我已经这样做了:

[x for x in zip(*[iter(example)]*3)]

如果只使用内置函数,还能如何做到这一点?

【问题讨论】:

  • 这看起来足够好,我怀疑你会得到一个更简洁的版本。

标签: python list tuples


【解决方案1】:

试试:

[tuple(example[i:i+3]) for i in range(0, len(example)-2, 3)]

但是,如果列表长度不是 3 的倍数,则会错过项目。

作为旁注,您的答案可以缩短为

list(zip(*[iter(example)]*3))

而不是使用[x for x in iter]

【讨论】:

    【解决方案2】:

    列表理解可以提供帮助,

    >>> example = ['Ireland',
    ...  '324',
    ...  '437',
    ...  'Germany',
    ...  '376',
    ...  '431',
    ...  'Canada',
    ...  '387',
    ...  '231']
    >>> n=3
    >>> [tuple(example[i:i+n]) for i in range(0, len(example), n)]
    [('Ireland', '324', '437'), ('Germany', '376', '431'), ('Canada', '387', '231')]
    

    如果列表的长度不是 n 的倍数,您将得到最后一个少于 n 项的元组。快速破解是用一些值填充输入列表,使其长度成为 n 的倍数。

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 2015-11-23
      • 2019-02-16
      • 2022-11-24
      • 2017-08-31
      相关资源
      最近更新 更多