Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在包含各种数据类型的Python列表中返回唯一的非数字值_Python_String_List_Boolean_Unique - Fatal编程技术网

在包含各种数据类型的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,这似乎是一个可行的解决方案