【问题标题】:How should I grab pairs from a list in python?我应该如何从 python 的列表中获取对?
【发布时间】:2010-05-13 19:59:55
【问题描述】:

假设我有一个如下所示的列表:

['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10']

使用 Python,我如何从中获取对,其中每个项目都包含在一对中,并且前后都有项目?

['item1', 'item2']
['item2', 'item3']
['item3', 'item4']
['item4', 'item5']
['item5', 'item6']
['item6', 'item7']
['item7', 'item8']
['item8', 'item9']
['item9', 'item10']

似乎我可以一起破解,但我想知道是否有人有他们以前使用过的优雅解决方案?

【问题讨论】:

标签: python list


【解决方案1】:

一个快速而简单的方法是这样的:

a = ['item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7', 'item8', 'item9', 'item10']

print zip(a, a[1:])

这将产生以下内容:

[('item1', 'item2'), ('item2', 'item3'), ('item3', 'item4'), ('item4', 'item5'), ('item5', 'item6'), ('item6', 'item7'), ('item7', 'item8'), ('item8', 'item9'), ('item9', 'item10')]

【讨论】:

  • 比列表理解更紧凑。我以前从未见过 zip。
  • 非常好。我没有意识到 zip 会有效地减少这样的列表。
【解决方案2】:

查看itertools documentation 中的pairwise 配方。

【讨论】:

    【解决方案3】:

    这应该可以解决问题:

    [(foo[i], foo[i+1]) for i in xrange(len(foo) - 1)]
    

    【讨论】:

    • 确实如此,太棒了!我知道我可以用列表理解做一些事情,但只是不知道如何处理它。谢谢!
    • 这会产生元组而不是 OP 要求的列表
    • OP 实际上只要求对,但如果您更喜欢列表而不是元组,您只需在理解中更改为 [foo[i], foo[i+1]]
    • foo[i:i+1] 呢?我认为这可能会更快。
    • 这实际上不起作用,因为 [a:b] 索引从 a 到 b-1,这只会产生一个数字。这确实有效: [foo[i:i+2] for x in xrange(len(foo) - 1)]
    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 2022-01-25
    • 2014-11-20
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    相关资源
    最近更新 更多