我有一个列表,其中每个元素可以是两个不同字符串中的数字或一个(让我们调用' a''')。我想将列表分成三个列表:数字列表,' 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上运行几次。可能我可以做得更好,但我不知道只有一次在mixlist上运行它的简短方法......
答案 0 :(得分:2)
你可以直接这样做,就像这样
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
方法将返回与该键对应的值。但是当找不到密钥时,它将返回作为第二个参数传递的默认值。因此,在我们的情况下,如果密钥为a
或b
,我们将获得相应的alist
或blist
。如果他们都没有,那么我们会得到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)