gpt4 book ai didi

python - 如何使用 filter() 从包含字符串和数字的列表中删除所有字符串?

转载 作者:行者123 更新时间:2023-11-28 19:47:14 25 4
gpt4 key购买 nike

例如我有一个列表

list = [1,2,3,'t',4,5,'fgt',6,7,'string']

我想使用 filter() 函数删除所有字符串,只留下数字。我可以用普通方法做到这一点,但我不能用过滤方法做到这一点...有什么提示吗?

所以:

list(filter(type(i)==str,a)))

行不通...我尝试使用它,但仍然行不通:

Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
list(filter(type(a[-1])==str,a))
TypeError: 'bool' object is not callable

最佳答案

虽然您可以为此使用 filter,但不要这样做。您需要一个 lambda 函数来执行此操作,并且与等效的列表理解或生成器表达式相比,它既慢又可读性差。相反,只需使用 listcomp 或 genexpr:

old_list = [1,2,3,'t',4,5,'fgt',6,7,'string']
new_list = [x for x in old_list if isinstance(x, (int, float))]
# or to remove str specifically, rather than preserve numeric:
new_list = [x for x in old_list if not isinstance(x, str)]

这比 filter+lambda 等价物简单得多:

new_list = list(filter(lambda x: isinstance(x, (int, float)), old_list))

COLDSPEED's answer 中所述,要普遍接受所有“类似数字”,您实际上应该将 isinstancenumbers.Number 一起使用;使用 (int, float) 处理文字类型,但不会处理 complexfractions.Fractiondecimal.Decimal,或第三方数字类型。

关于python - 如何使用 filter() 从包含字符串和数字的列表中删除所有字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46395974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com