在包含各种数据类型的Python列表中返回唯一的非数字值
我有以下表格的清单:在包含各种数据类型的Python列表中返回唯一的非数字值,python,string,list,boolean,unique,Python,String,List,Boolean,Unique,我有以下表格的清单: full_list = [1, 2, 5, "string", False, True] 我想返回一个只包含非数字值的列表,如下所示: new_list = ["string", False, True] 我最初的想法是使用isdigit()方法,但这只适用于字符串。我可以将列表中的每个项转换为字符串,然后调用isdigit(),但是 感觉像是一个冗长的工作环境。解决方案在某种程度上起作用,但将从最终列表中删除布尔值。有没有更优雅/简单的方法来实现这一点?您可以只检查i
full_list = [1, 2, 5, "string", False, True]
我想返回一个只包含非数字值的列表,如下所示:
new_list = ["string", False, True]
我最初的想法是使用isdigit()方法,但这只适用于字符串。我可以将列表中的每个项转换为字符串,然后调用isdigit(),但是
感觉像是一个冗长的工作环境。解决方案在某种程度上起作用,但将从最终列表中删除布尔值。有没有更优雅/简单的方法来实现这一点?您可以只检查
int
和bool
,不包括前者,但包括后者(后者是前者的子类):
您可以只检查
int
和bool
,不包括前者,但包括后者(后者是前者的子类):
你的方法不适用于实数。 这是真的吗
new_list = [i for i in full_list if (type(i) != int) and (type(i) != float)]
你的方法不适用于实数。 这是真的吗
new_list = [i for i in full_list if (type(i) != int) and (type(i) != float)]
您可以按
类型(项目)!=int
(通常我会使用isinstance
,但您不想放弃布尔值-布尔值是python中整数的子类):
然后筛选重复项:
def uniques(iterable):
seen = set()
for item in iterable:
if item not in seen:
yield item
seen.add(item)
>>> list(uniques(filtered_list))
['string', False, True]
或应用已实现uniques的外部库1:
>>> from iteration_utilities import Iterable
>>> Iterable([1, 2, 5, "string", False, True]).filter(lambda x: type(x) != int).unique_everseen().as_list()
['string', False, True]
>>> # This time with a duplicate "False"
>>> Iterable([1, 2, 5, "string", False, False, True]).filter(lambda x: type(x) != int).unique_everseen().as_list()
['string', False, True]
1披露:我是这篇文章的作者,你可以通过
类型(项目)!=int
(通常我会使用isinstance
,但您不想放弃布尔值-布尔值是python中整数的子类):
然后筛选重复项:
def uniques(iterable):
seen = set()
for item in iterable:
if item not in seen:
yield item
seen.add(item)
>>> list(uniques(filtered_list))
['string', False, True]
或应用已实现uniques的外部库1:
>>> from iteration_utilities import Iterable
>>> Iterable([1, 2, 5, "string", False, True]).filter(lambda x: type(x) != int).unique_everseen().as_list()
['string', False, True]
>>> # This time with a duplicate "False"
>>> Iterable([1, 2, 5, "string", False, False, True]).filter(lambda x: type(x) != int).unique_everseen().as_list()
['string', False, True]
1披露:我是这本书的作者
- 您希望丢弃整数(1、2、3),但不丢弃表示整数的字符串(“1”、“2”、“3”)
- 您希望每个元素在结果中都是唯一的(如标题所示)
- 顺序无关紧要
set
s。并使用Number
作为要检查的类,再加上检查bool
,因为True
/False
也是Number
实例
from numbers import Number
full_list = [1, 2, 5, "string", False, True]
set(full_list) - set(
i in full_list if isinstance(i, Number) and not isinstance(i, bool))
Number
也包括浮动。您的示例只有整数,但没有明确提到所有数字都应该是整数。假设
- 您希望丢弃整数(1、2、3),但不丢弃表示整数的字符串(“1”、“2”、“3”)
- 您希望每个元素在结果中都是唯一的(如标题所示)
- 顺序无关紧要
set
s。并使用Number
作为要检查的类,再加上检查bool
,因为True
/False
也是Number
实例
from numbers import Number
full_list = [1, 2, 5, "string", False, True]
set(full_list) - set(
i in full_list if isinstance(i, Number) and not isinstance(i, bool))
Number
也包括浮动。你的例子只有整数,但你没有明确提到所有数字都应该是整数。你可以把前三个值切掉:full\u list[3:][“string”,False,True]
嘿#Peter他不知道数组,他只是给我们举个例子。这段数据在程序中是动态的(据我所知)。@user5676973是正确的。你只需将前三个值切掉:full\u list[3:][“string”,False,True]
嘿#Peter他不知道数组,他只是给我们举个例子。这段数据在程序中是动态的(据我所知)。@user5676973是正确的。uniques
函数的意义是什么,因为在集合中所有元素都是唯一的?@Jérôme这样你就可以按顺序迭代,但过滤掉集合中存储的非唯一项。如果你只是迭代集合,你就失去了排序。uniques
函数的意义是什么,因为在集合中所有元素都是唯一的?@Jérôme这样你就可以按顺序迭代,但过滤掉集合中存储的非唯一项。如果你只是迭代集合,你就失去了顺序。顺序重要吗?顺序重要吗?为什么排除浮点数?从问题str.isdigit
是排除标准,而是“1.2”。isdigit()
是False
。那么type()似乎是一个可行的解决方案,以防您需要在py中区分bool和int为什么排除浮点?从问题str.isdigit
是排除标准,是“1.2”。isdigit()
是False
。然后键入()如果您需要在pyand中区分bool和int,对于任何类型的数字都可以使用numbers.number
ABC,对于任何类型的数字都可以使用numbers.number
ABC,这似乎是一个可行的解决方案