【问题标题】:Get a list of tuples of neighbors [duplicate]获取邻居元组的列表[重复]
【发布时间】:2016-07-17 01:05:55
【问题描述】:

有什么简单的方法使用zip来做:

Input: (1,2,3,4,5)
Output: ((1,2),(2,3),(3,4),(4,5))

编辑:是的,一般的 ngram 解决方案是相似的,但对于这样一个简单的任务来说太冗长了。请参阅下面的答案以了解原因。

【问题讨论】:

标签: python list tuples


【解决方案1】:

zip 有自己尾巴的元组:

>>> ł = (1,2,3,4,5)
>>> zip(ł, ł[1:])
[(1, 2), (2, 3), (3, 4), (4, 5)]

【讨论】:

  • 你需要显式地转换成元组或列表。
  • 这是我一直在寻找/希望的答案。绝对优雅。是的,为了严格满足这个问题,它必须被转换为一个元组。
  • zip 的实际返回值(无论是列表还是生成器)并不那么有趣;如有必要,适应另一个序列是微不足道的。
  • 啊啊,ł 很漂亮,但它在 Python 2 中中断,因为 unicode 不能用作变量名。 lst 很好,不需要一个字母。 ;)
  • 我对变量名的更改有点开玩笑,并且只适用于 Python 3。但是,小写的 l 是一个错误的变量名:)
【解决方案2】:

您可以使用列表推导式或生成器表达式初始化元组:

>>> x = (1, 2, 3 4, 5)
>>> tuple((x[i], x[i+1]) for i in range(len(x)-1))
((1, 2), (2, 3), (3, 4), (4, 5))

或者使用切片:

>>> tuple(x[i:i+2] for i in range(len(x)-1))
((1, 2), (2, 3), (3, 4), (4, 5))

【讨论】:

  • 切片也可以用x[i:i + 2]代替(x[i], x[i + 1])
【解决方案3】:
in = (1, 2, 3, 4, 5)
out = tuple([(in[i], in[i+1] for i in range(len(in) - 1)])
print(out)

>> ((1, 2), (2, 3), (3, 4), (4, 5))

【讨论】:

    【解决方案4】:

    另一种可能性

    x = (1,2,3,4,5)
    tuple([(a,b) for a,b in zip(x[:-1],x[1:])])
    

    【讨论】:

    • 您确实意识到列表 comp 毫无意义吧? tuple(zip(x[:-1],x[1:])) 就好了。
    • @StevenSummers 我现在做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    相关资源
    最近更新 更多