如何使用 isinstance() 根据对象的类型将列表分成两个列表?
How to separate a list into two lists according to the objects' types using isinstance()?
列表如下:["apple", "orange", 5, "banana", 8, 9]
如何使用 isinstance() 将字符串 (str) 放入一个列表并将整数 (int) 放入另一个列表?
这边-
a = ["apple", "orange", 5, "banana", 8, 9]
b1 = [el for el in a if isinstance(el, str)]
b2 = [el for el in a if isinstance(el, int)]
使用列表理解:
lst = ["apple", "orange", 5, "banana", 8, 9]
strings = [s for s in lst if isinstance(s, str)]
integers = [n for n in lst if isinstance(n, int)]
或者,为了避免使用两个 for
循环,您也可以只遍历列表并根据需要附加到相应的列表:
strings = list()
integers = list()
for l in lst:
if isinstance(l, str):
strings.append(l)
elif isinstance(l, int):
integers.append(l)
这是使用 itertools.groupby
和 type
的通用解决方案。
我在这里选择 return 字典,因为它很容易通过名称获取元素,但您也可以 return 列表的列表。
from itertools import groupby
l = ["apple", "orange", 5, "banana", 8, 9]
grouper = lambda x: type(x).__name__
{k:list(g) for k,g in groupby(sorted(l, key=grouper), grouper)}
输出:
{'int': [5, 8, 9], 'str': ['apple', 'orange', 'banana']}
如列表:
ints, strings = [list(g) for k,g in groupby(sorted(l, key=grouper), grouper)]
输出:
>>> ints
[5, 8, 9]
>>> strings
['apple', 'orange', 'banana']
列表如下:["apple", "orange", 5, "banana", 8, 9]
如何使用 isinstance() 将字符串 (str) 放入一个列表并将整数 (int) 放入另一个列表?
这边-
a = ["apple", "orange", 5, "banana", 8, 9]
b1 = [el for el in a if isinstance(el, str)]
b2 = [el for el in a if isinstance(el, int)]
使用列表理解:
lst = ["apple", "orange", 5, "banana", 8, 9]
strings = [s for s in lst if isinstance(s, str)]
integers = [n for n in lst if isinstance(n, int)]
或者,为了避免使用两个 for
循环,您也可以只遍历列表并根据需要附加到相应的列表:
strings = list()
integers = list()
for l in lst:
if isinstance(l, str):
strings.append(l)
elif isinstance(l, int):
integers.append(l)
这是使用 itertools.groupby
和 type
的通用解决方案。
我在这里选择 return 字典,因为它很容易通过名称获取元素,但您也可以 return 列表的列表。
from itertools import groupby
l = ["apple", "orange", 5, "banana", 8, 9]
grouper = lambda x: type(x).__name__
{k:list(g) for k,g in groupby(sorted(l, key=grouper), grouper)}
输出:
{'int': [5, 8, 9], 'str': ['apple', 'orange', 'banana']}
如列表:
ints, strings = [list(g) for k,g in groupby(sorted(l, key=grouper), grouper)]
输出:
>>> ints
[5, 8, 9]
>>> strings
['apple', 'orange', 'banana']