【问题标题】:Extract Lists from tuple with a condition从具有条件的元组中提取列表
【发布时间】:2022-11-12 02:26:34
【问题描述】:

我试图从一个元组中提取列表,条件是每个 X 升序的数字都应该在同一个列表中提取。 (使用列表理解)

示例:(4,2,2,3,5,6,0,0,2) -> [4],[2,2,3,5,6],[0,0,2]

E=tuple([random.randint(0,10) for x in range(10)])

我尝试了以下方法:

Res=[E[x:y] for x in range(0,len(E)) for y in range(x+1,len(E)) if (y>x)]

【问题讨论】:

  • 你的问题不清楚
  • 使用列表推导从元组中提取列表 [] 中按升序排列的 N 个数字。
  • 为什么必须使用列表推导?

标签: python


【解决方案1】:

这是一种可能的方法。您可以使用np.splitrandom.sample 来获取用作拆分索引的随机数。

import random
import numpy as np

lst = [4,2,2,3,5,6,0,0,2]
number_of_splits = 4
random.seed(42)
random_splits = sorted(random.sample(set(range(1,len(lst)-1)),number_of_splits-1))
print(random_splits)

result = [list(elem) for elem in np.split(lst, random_splits)]
print(result)
[1, 6, 7]
[[4], [2, 2, 3, 5, 6], [0], [0, 2]]

【讨论】:

    【解决方案2】:

    没有列表理解可能更容易做到这一点 - 即,像这样的简单循环:

    from random import randint as RANDINT
    
    t = 4, 2, 2, 3, 5, 6, 0, 0, 2
    out = []
    offset = 0
    while offset < len(t):
        e = RANDINT(1, len(t)+1-offset)
        out.append(list(t[offset:offset+e]))
        offset += e
    print(out)
    

    输出(示例):

    [[4], [2, 2], [3], [5, 6, 0, 0], [2]]
    

    【讨论】:

      【解决方案3】:

      似乎很难用一个列表理解来实现它。

      E = (4,2,2,3,5,6,0,0,2)
      pre_idx = 0
      result = []
      for idx in range(len(E)):
          if E[idx] < E[pre_idx]:
            result.append(list(E[pre_idx:idx]))
            pre_idx = idx
      if pre_idx < len(E):
          result.append(list(E[pre_idx:]))
      print(result)
      # [[4], [2, 2, 3, 5, 6], [0, 0, 2]]
      

      【讨论】:

        猜你喜欢
        • 2018-04-07
        • 1970-01-01
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        • 2021-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多