拆分包含字符串和整数的列表

10 投票
9 回答
38844 浏览
提问于 2025-04-17 15:15
myList = [ 4,'a', 'b', 'c', 1 'd', 3]

怎么把这个列表分成两个列表,一个只包含字符串,另一个只包含整数,用一种优雅的、符合Python风格的方法?

输出:

myStrList = [ 'a', 'b', 'c', 'd' ]

myIntList = [ 4, 1, 3 ]

注意:我并没有实现这样的列表,只是在想有没有什么优雅的办法(真的有吗?)来解决这个问题。

9 个回答

3

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们刚开始学习编程的时候。比如,有人可能会在使用某个功能时遇到错误,或者不知道该怎么做才能实现某个效果。

在这种情况下,很多人会选择去网上寻找答案,像StackOverflow这样的网站就是一个很好的资源。在这些网站上,程序员们会分享他们遇到的问题和解决方案,大家可以互相帮助。

如果你在编程过程中遇到问题,不妨去这些网站看看,可能会找到你需要的答案,或者至少能让你更清楚地理解问题所在。

def filter_by_type(list_to_test, type_of):
    return [n for n in list_to_test if isinstance(n, type_of)]

myList = [ 4,'a', 'b', 'c', 1, 'd', 3]
nums = filter_by_type(myList,int)
strs = filter_by_type(myList,str)
print nums, strs

>>>[4, 1, 3] ['a', 'b', 'c', 'd']
14

你可以使用列表推导式:

>>> myList = [ 4,'a', 'b', 'c', 1, 'd', 3]
>>> myIntList = [x for x in myList if isinstance(x, int)]
>>> myIntList
[4, 1, 3]
>>> myStrList = [x for x in myList if isinstance(x, str)]
>>> myStrList
['a', 'b', 'c', 'd']
17

正如其他人评论中提到的,你应该开始考虑怎么去掉那个存放不一样数据的列表。如果实在做不到的话,我建议你使用一个叫做defaultdict的东西:

from collections import defaultdict
d = defaultdict(list)
for x in myList:
   d[type(x)].append(x)

print d[int]
print d[str]

撰写回答