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

标签 python list-comprehension conditional-statements

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

相关文章:

haskell - 生成所有可能的树

尽管 ruby​​ 条件语句执行 Javascript

python - 使用 Python 实现基本的 Google Place Add

python - ctypes中的循环结构,python

python - 使用列表理解创建嵌套列表

Pyspark - 如何创建从单元格复制特定数字的列

r - 如何在R中从具有多个条件的一个数据帧创建多个数据帧

Python 变量覆盖自身

python - 使用sendgrid和python,如何一次向多个BCC发送电子邮件?

python - 尝试通过列表理解来完成这个简单的功能