Python 使用列表理解在偶数索引处的偶数列表
我试图使用列表理解在偶数索引位置生成偶数编号的列表。其他值将为Python 使用列表理解在偶数索引处的偶数列表,python,list-comprehension,Python,List Comprehension,我试图使用列表理解在偶数索引位置生成偶数编号的列表。其他值将为0。我已经完成了与下面相同的功能 def even_list(l): ll = [] for x in l: if x%2 == 0: ll.append(x) ll.append(0) return ll[:-1] 现在我需要把它变成一个列表 input = [11, 17, 12, 17, 40, 19, 12, 16] out = [12, 0, 40, 0, 12,
0
。我已经完成了与下面相同的功能
def even_list(l):
ll = []
for x in l:
if x%2 == 0:
ll.append(x)
ll.append(0)
return ll[:-1]
现在我需要把它变成一个列表
input = [11, 17, 12, 17, 40, 19, 12, 16]
out = [12, 0, 40, 0, 12, 0, 16]
这是我尝试过的(l
为输入,lo
为输出):
范围(10)
生成一个从0到9的整数列表。
对于这个列表,我应用了一个映射,它将列表中的所有奇数转换为0,而不处理偶数(lambda x:x,如果x%2==0,则为0,否则为0
)
然后我把这张地图放回一个列表中,以得到一张漂亮的打印图。我无法准确地从你的帖子中找到你想要的东西,但我认为你想要的是:
>>> [x if x%2 == 0 else 0 for x in range(20)]
[0, 0, 2, 0, 4, 0, 6, 0, 8, 0, 10, 0, 12, 0, 14, 0, 16, 0, 18, 0]
给定一个列表,获取偶数索引下的所有数字。如果这些数字中的任何一个是偶数,请将其放入新列表并返回:
In [10]: L = [3,1,54,5,2,3,4,5,6,5,2,5,3,2,5,2,2,5,2,5,2]
In [11]: [num for i,num in enumerate(L) if not num%2 and not i%2]
Out[11]: [54, 2, 4, 6, 2, 2, 2, 2]
如果要在两者之间添加0
s,则可以执行一点itertools
magic:
In [12]: list(itertools.chain.from_iterable(zip((num for i,num in enumerate(L) if not num%2 and not i%2), itertools.cycle([0]))))[:-1]
Out[12]: [54, 0, 2, 0, 4, 0, 6, 0, 2, 0, 2, 0, 2, 0, 2]
<>当然,这是很多括号和括号,所以让我们仔细看看:
list(…)[:-1]
将..
转换为列表
并获取该列表中除最后一个元素以外的所有元素。这与添加0
s并删除最后一个时的操作类似(num代表i,num在枚举(L)中如果不是num%2而不是i%2)
与编辑之前相同,只是它使用括号(()
)而不是括号([]
)。这将它转换为生成器理解,而不是列表理解-它只需要执行一点点优化-直到需要时才计算值(直到zip
请求下一个值)itertools.cycle([0])
给出了无限的0
s列表zip(A,B)
返回元组列表,其中i
th元组有两个元素,A
的i
th元素和B
的i
th元素itertools.chain.from_iterable(zip(A,B))
返回A
和B
交错的元素,作为生成器。本质上,这就像这样做:因此,所有这些加在一起就可以给你想要的东西了你可以根据预期的输出来尝试。但是你必须知道,
列表理解
并不比for loop
多或少
input = [11, 17, 12, 17, 40, 19, 12, 16]
>>>[k for j in [[i,0] for i in input if i%2 == 0] for k in j][:-1]
[12, 0, 40, 0, 12, 0, 16]
您能添加输入/预期输出吗?您是否忘记了代码中的
其他:
?您见过xrange(0,end,2)
?@jornsharpe是的,我知道不是,我试图提出一个我无法解决的问题,完全符合SO的规则。我投票将此问题作为离题题结束,因为它不太可能帮助其他用户。谢谢,我也尝试了同样的方法,但我需要在out列表中的奇数索引处附加0。这对我来说有点挑战。添加了输入和out@RohitSrivastava:查看editMind来解释一下吗?我添加了一些细节:)
In [12]: list(itertools.chain.from_iterable(zip((num for i,num in enumerate(L) if not num%2 and not i%2), itertools.cycle([0]))))[:-1]
Out[12]: [54, 0, 2, 0, 4, 0, 6, 0, 2, 0, 2, 0, 2, 0, 2]
def someFunc(A, B):
for i in range(len(A)):
yield A[i]
yield B[i]
input = [11, 17, 12, 17, 40, 19, 12, 16]
>>>[k for j in [[i,0] for i in input if i%2 == 0] for k in j][:-1]
[12, 0, 40, 0, 12, 0, 16]