python 根据条件/if else 语句拆分列表

标签 python list if-statement split

我正在尝试将一个列表分成两个列表。这是列表:

L = [3.5, 1 ,7, 2 ,4.5, 1, 6, 2, 4.8, 2 ,3.1,1, 9, 2]

如果我想根据粗体数字(1 或 2)拆分列表,它们始终是位置中的偶数(2x),那么 1 之前的数字进入一个列表,2 之前的数字进入到另一个列表:

l1 = [3.5, 4.5, 3.1] #bold number = 1

l2 = [7, 6, 4.8, 9] #bold number = 2

此外,当有i+1 粗体数字时,问题可能会被扩展,因此需要拆分为i+1 列表。

我应该如何使用 if-else 语句来处理列表?

最佳答案

在第 2 步循环中使用三元执行此操作,该循环调度相关列表中的前一个元素(我采用了一个快捷方式:如果值为 1,则为 l1,否则为l2,所以它很脆弱):

l=[3.5, 1 ,7, 2 ,4.5, 1, 6, 2, 4.8, 2 ,3.1,1, 9, 2]

l1,l2 = [],[]
for i in range(1,len(l),2):
    (l1 if l[i]==1 else l2).append(l[i-1])

print(l1,l2)

产量:

[3.5, 4.5, 3.1] [7, 6, 4.8, 9]

一般情况:根据最大索引创建一个列表列表,并循环根据索引调度值(l[i]-1是从0开始的索引和l[i] 是要插入的值)

lists = [[] for _ in range(max(l[1::2]))]

for i in range(1,len(l),2):
    lists[l[i]-1].append(l[i-1])

print(lists)

结果:

[[3.5, 4.5, 3.1], [7, 6, 4.8, 9]]

最后一部分使用 itertools.islice 而不是使用索引来更“pythonic”:

import itertools
for i,v in zip(itertools.islice(l,1,len(l),2),itertools.islice(l,0,len(l),2)):
    lists[i-1].append(v)

关于python 根据条件/if else 语句拆分列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42247259/

相关文章:

python - 如何将 subprocess.communicate() 转换为 utf-8 字符串?

list - OCaml:交换列表中的元素

java - 简短的 IF - ELSE 语句

PHP - if 语句 - with - if isset - 使用多个变量问题

Python - Apache Tika 单页解析器

python - 如何更新计数器 : set new value after avery request, 不将新值增加到以前的值?

python numpy 和内存效率(按引用传递与值传递)

java - 集合列表返回重复项

python - 如何返回True和False?

python - 如何处理许多几乎相同的 if 语句?