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

2024-09-29 22:27:22 发布

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

我有一个列表,其中每个元素可以是一个数字,也可以是两个不同字符串中的一个(我们称之为“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']

但这会导致在mixlist上运行几次。也许我可以做得更好,但我不知道一个短的方法来做它运行混音表只有一次。。。在


Tags: 字符串in元素列表foriftype数字
1条回答
网友
1楼 · 发布于 2024-09-29 22:27:22

你可以直接做,像这样

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

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

^{pr2}$

dict.get方法将返回与键对应的值。但是当找不到键时,它将返回作为第二个参数传递的默认值。因此,在我们的例子中,如果键是a或{},我们将得到相应的alist或{}。如果两者都不是,那么我们将得到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)

相关问题 更多 >

    热门问题