gpt4 book ai didi

python - 按逻辑标准将列表拆分为子列表

转载 作者:行者123 更新时间:2023-12-01 05:18:16 25 4
gpt4 key购买 nike

我有一个列表,其中每个元素可以是数字或两个不同字符串之一(我们称之为“a”和“b”)。我想将列表分成三个列表:数字列表、“a”列表和“b”列表。

我可以使用条件列表理解来做到这一点:

mixlist=[1,2,'a',3,'b','a']
numlist=[el for el in mixlist if type(el)==int]
alist=[el for el in mixlist if el=='a']
blist=[el for el in mixlist if el=='b']

但它会导致在混合列表上运行多次。也许我可以做得更好,但我不知道一种简短的方法可以只在混合列表上运行一次......

最佳答案

你可以直接这样做,就像这样

numlist, alist, blist = [], [], []
for item in mixlist:
if item == "a":
alist.append(item)
elif item == "b":
blist.append(item)
else:
numlist.append(item)

或者你可以缩短一点,就像这样

numlist, alist, blist = [], [], []
d = {"a": alist, "b": blist}
for item in mixlist:
d.get(item, numlist).append(item)

dict.get 方法将返回键对应的值。但是当找不到该键时,它将返回作为第二个参数传递的默认值。因此,在我们的例子中,如果键是 ab,我们将获得相应的 alistblist。如果两者都不是,那么我们将获得 numlist 并将 item 附加到它。

编辑:您可以像这样稍微改进直接的方式

mixlist = [1, 2, 'a', 3, 'b', 'a']

numlist, alist, blist = [], [], []
nappend, aappend, bappend = numlist.append, alist.append, blist.append

for item in mixlist:
if item == "a":
aappend(item)
elif item == "b":
bappend(item)
else:
nappend(item)

关于python - 按逻辑标准将列表拆分为子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22867439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com