【问题标题】:List comprehension using two lists [closed]使用两个列表的列表理解[关闭]
【发布时间】:2014-12-09 18:06:36
【问题描述】:

如果我有这样的列表(请注意,它会在5121926 .. 等之后跳过一个。所以61320、@ 987654328@都不见了):

lst1 = [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61]

我有一个这样的列表(这表示跳过)

lst2 = [0,2] # this means the 0'st skip and 2nd skip which is 13)

并结合lst1lst2

我想创建一个具有[0, 1, 2, 3, 4, 5, 14, 15, 16, 17, 18, 19] 的新lst3

我不知道我的解释是否有意义,但我基本上想使用两个列表中的值并创建一个新列表。这是我尝试过的:

lst1 = [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 47, 49, 50, 51, 52, 53, 54, 56, 57, 58, 59, 60, 61]

def colorChecker(color):
    for c in color: 
    return 6 + 7 * color

lst3 = [ p for p in lst1 if p < colorChecker([0,2])] 

这似乎只适用于colorChecker[0],不适用于colorChecker[1]

【问题讨论】:

  • 那么...你尝试了什么?
  • 这个问题似乎离题了,因为它是关于让我们向您展示 codez
  • lst 3= [ p for p in playablePieces if p
  • @jonrsharpe 请检查编辑的主线程!谢谢
  • 您可能必须在某个地方拥有for whatever in [0, 2]。您不能只将列表传递给函数并期望它执行“哦,我猜他们的意思是递归调用函数”。将其拆分为多个步骤: 1. 将lst1 分解为连续的部分; 2. 索引到新的列表列表中以获取您需要的部分; 3. 将他们重新组合在一起。不要试图将所有内容放在一条线上,这对任何人都没有帮助。

标签: python list list-comprehension


【解决方案1】:

如果您已经知道丢失的元素在哪里,那么根本不需要lst1。您的代码变得如此简单:

>>> lst2 = [0, 2]
>>> lst3 = []
>>> for i in lst2:
        lst3.extend(range(7*i, 7*i+6))


>>> lst3
[0, 1, 2, 3, 4, 5, 14, 15, 16, 17, 18, 19]

【讨论】:

  • 使用range()的好处;我愚蠢地认为lst1 的给定定义只是一个荒谬的最小化示例。 :-}
【解决方案2】:

由于 lst2 中的每个元素似乎都引用了来自 lst1 的一组 6 个元素,所以我首先创建一个包含这些块的列表,例如

[lst1[i*6:(i+1)*6] for i in lst2]

...计算结果为

== [lst1[0*6:(0+1)*6], lst1[2*6:(2+1)*6]]
== [lst1[0:6], lst1[12:18]]
== [[0, 1, 2, 3, 4, 5], [14, 15, 16, 17, 18, 19]]

最后,您只需 flatten 该列表即可获得结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2013-05-10
    • 2023-03-26
    • 1970-01-01
    • 2019-08-05
    相关资源
    最近更新 更多