如何在Python中消除列表中的所有字符串?

jtw3ybtb  于 3个月前  发布在  Python
关注(0)|答案(5)|浏览(71)

如何在Python中消除给定列表中的所有字符串?
例如,如果我有

list = ['hello', 1, 2, 3, 4, 'goodbye', 'help']

字符串
我希望结果是

[1, 2, 3, 4]

iqjalb3h

iqjalb3h1#

你需要使用isinstance来过滤掉那些字符串元素。也不要命名你的变量list,它会隐藏内置的list

>>> from numbers import Real
>>> lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help']
>>> [element for element in lst if isinstance(element, Real)]
[1, 2, 3, 4]

字符串

>>> [element for element in lst if isinstance(element, int)]
[1, 2, 3, 4]


>>> [element for element in lst if not isinstance(element, str)]
[1, 2, 3, 4]

vohkndzv

vohkndzv2#

你可以使用isinstance来实现这一点,但与user 3100115的其他答案不同,我会 * 将你不想要的类型列入黑名单 *,而不是只将少数类型列入白名单。不确定哪种类型更适合你的特殊情况,只是添加它作为替代方案。它也可以在没有任何导入的情况下工作。

lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help']
filtered = [element for element in lst if not isinstance(element, str)]
print(filtered)
# [1, 2, 3, 4]

字符串
除了列表解析,你也可以使用filter内置函数。它返回一个生成器,所以要直接打印它,你必须先把它转换成列表。但是如果你要重写它,(例如使用for-环),不要转换它,它会更快,消耗更少的内存,由于“懒惰的评估”。如果将方括号替换为圆括号,则可以在上面的示例中实现相同的效果。

lst = ['hello', 1, 2, 3, 4, 'goodbye', 'help']
filtered = list(filter(lambda element: not isinstance(element, str), lst))
print(filtered)
# [1, 2, 3, 4]

pkln4tw6

pkln4tw63#

要么使用列表解析作为@user3100115,要么使用“lisp/lambda方法”

>> l = [1, 2, 'a', 'b']
>> list(filter(lambda a: isinstance(a, int), l))
[1, 2]

字符串
顺便说一下,不要将变量命名为list,它已经是一个Python函数了。:)

7kqas0il

7kqas0il4#

还有一个解决方案:D

l = [1, 'th', "Bro", "123", 12, -12]
filtered = [element for element in l if type(element) != str]
print(filtered)
# -> [1, 12, -12]``

字符串

quhf5bfb

quhf5bfb5#

我的方法是:

values = [v for v in values if type(v) is not str]

字符串
这将是类似于这样写出来(但更快):

new_values = []
for v in old_values:
  if type(v) is not str:

new_values.append(v)


我将你的“list”重命名为“values”,因为list已经存在于python中,它是list类型的类名。

相关问题