【问题标题】:List Split into Consecutive Lists of 2 - Ascending by 1列表拆分为 2 个连续的列表 - 升序为 1
【发布时间】:2021-06-27 20:56:39
【问题描述】:

对于列表:

list_x=[1,2,3,6,7,8,1,2,6,7]

如何将其拆分为由 2 个元素组成的单独列表,这些元素是连续的且按 1 递增。

期望的输出

list_a=[1,2]
list_b=[2,3]
list_c=[6,7]
list_d=[7,8]
list_e=[1,2]
list_f=[6,7]

请注意,'list_x' 可以是任意长度,并且需要将此列表分成 2 对。每对都连续加 1。

这是一次尝试:

list_a = list_x.ne.shift(fill_value=list_a.iat[0])

谢谢。

【问题讨论】:

  • 简单的方法是x = list( [a,b] for a,b in zip(list_x[:-1],list_x[1:])
  • 您真的希望它们在全局命名空间中被称为“list_a”、“list_b”还是可以是列表列表?如果是后者,那么[list_x[i:i+2] for i in range(len(list_x)-1) if list_x[i] + 1 == list_x[i+1]] 就可以了。否则,您必须使用globals 处理讨厌的事情,或者只是从您的问题中复制并粘贴“所需的输出”;)
  • 感谢您提供这些答案-通过下摆完全理解。此外 - 列表不必称为“list_a”、“list_b”等 - 这只是为了说明我所追求的。

标签: python pandas list shift


【解决方案1】:

对于具有连续编号的连续对

values = [[a, b] for a, b in zip(list_x, list_x[1:]) if a + 1 == b]
print(values)  # [[1, 2], [2, 3], [6, 7], [7, 8], [1, 2], [6, 7]]

对于所有连续的对

values = list(zip(list_x, list_x[1:]))
print(values)  # [(1, 2), (2, 3), (3, 6), (6, 7), (7, 8), (8, 1), (1, 2), (2, 6), (6, 7)]

【讨论】:

  • 太棒了 - 正是我所追求的。
【解决方案2】:

你也可以试试这个:

list_x = [1, 2, 3, 6, 7, 8, 1, 2, 6, 7]

list_new = [[a, b] for a, b in zip(list_x, list_x[1:])]

它应该可以正常工作并且非常简单。您将获得所需的列表列表。

【讨论】:

  • @azro 感谢您指出并给出了好的答案:)
  • 感谢您 - 非常有帮助
猜你喜欢
  • 2019-10-12
  • 2020-12-19
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 2014-11-26
  • 2019-09-18
  • 2021-12-07
相关资源
最近更新 更多