使用两个列表的列表理解

2024-06-17 17:19:29 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有这样一个列表(注意它在5121926之后跳过一个)。。等等,所以6132027都丢失了):

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结合起来

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

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

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]。你知道吗


Tags: andtheinwhich列表forthismeans
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该列表即可获得结果。你知道吗

如果您已经知道丢失的元素将在哪里,那么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]

相关问题 更多 >