如何检查 Python 列表是否包含任何字符串作为元素
How to check whether a Python list contains ANY string as an element
所以,我正在开发一个 Python 函数,它接收一个数字列表作为参数并对其进行处理,就像这个例子:
def has_string(myList: list) -> str:
# Side cases
if myList == []:
return "Empty list can not be accepted as argument"
if myList contains any str object: # Here's the problem
return "Message: list contains at least one 'str' object"
return "Success, list contains only numeric values"
函数用途:
- 不接受:
- 空列表 (
[]
);
- 非数字列表。
- 给return一个字符串消息。
我尝试了一些方法,例如:
-
if str in my_list: # return message
-
if "" in my_list: # return message
-
if my_list.count(""): # return message
尝试还在继续。我不想创建一个 for
循环并逐项检查,因为我想要一个不同的解决方案,它不需要通过所有索引来判断我是否列表包含一个字符串。
正如我之前提到的,我尝试了一些不同的方法来检查 if
块,但是 none 有效;该程序仍然继续处理列表,即使有一个错误标准来停止它。
非常感谢任何帮助,提前致谢!
seq = [0, 1, 2, 3, "5", 8, 13]
result = filter(lambda x: type(x)==str, seq)
print(list(result))
可能是此代码将从列表中过滤所有 str 类型值
除了用 for
循环显式地检查序列,还是隐式地用更高级别的构造检查序列,我想不出任何其他方法来检查序列。鉴于此,如果您的意图是在按照说明在列表中找到非数字值后“结束程序”,您可能会考虑这样的事情。
示例:
my_list = [1,2,3,4,6,7,"8"]
for value in my_list:
if not isinstance(value, (int, float)):
raise TypeError(f"Expected only numeric types, found {type(value)} in sequence.")
输出:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-791ea7c7a43e> in <module>
3 for value in my_list:
4 if not isinstance(value, (int, float)):
----> 5 raise TypeError(f"Expected only numeric types, found {type(value)} in sequence.")
TypeError: Expected only numeric types, found <class 'str'> in sequence.
因为你不想 for
循环使用 map
并获取列表中每个元素的类型,那么你可以使用 in
检查列表是否包含 sting:
seq = [0, 1, 2, 3, 4, "Hello"]
if str in map(type, seq):
print("List contains string")
else:
print("Accepted")
all()
在第一个计算结果为 False 的项目处停止。基本上:
if all(isinstance(x, (int, float)) for x in my_list):
print("all numbers!")
else:
print("not all number!")
并且使用这些 C 级函数而不是推导式应该更高效:
from itertools import repeat
if all(map(isinstance, my_list, repeat((int, float)))):
print("all numbers!")
else:
print("not all number!")
所以,我正在开发一个 Python 函数,它接收一个数字列表作为参数并对其进行处理,就像这个例子:
def has_string(myList: list) -> str:
# Side cases
if myList == []:
return "Empty list can not be accepted as argument"
if myList contains any str object: # Here's the problem
return "Message: list contains at least one 'str' object"
return "Success, list contains only numeric values"
函数用途:
- 不接受:
- 空列表 (
[]
); - 非数字列表。
- 空列表 (
- 给return一个字符串消息。
我尝试了一些方法,例如:
-
if str in my_list: # return message
-
if "" in my_list: # return message
-
if my_list.count(""): # return message
尝试还在继续。我不想创建一个 for
循环并逐项检查,因为我想要一个不同的解决方案,它不需要通过所有索引来判断我是否列表包含一个字符串。
正如我之前提到的,我尝试了一些不同的方法来检查 if
块,但是 none 有效;该程序仍然继续处理列表,即使有一个错误标准来停止它。
非常感谢任何帮助,提前致谢!
seq = [0, 1, 2, 3, "5", 8, 13]
result = filter(lambda x: type(x)==str, seq)
print(list(result))
可能是此代码将从列表中过滤所有 str 类型值
除了用 for
循环显式地检查序列,还是隐式地用更高级别的构造检查序列,我想不出任何其他方法来检查序列。鉴于此,如果您的意图是在按照说明在列表中找到非数字值后“结束程序”,您可能会考虑这样的事情。
示例:
my_list = [1,2,3,4,6,7,"8"]
for value in my_list:
if not isinstance(value, (int, float)):
raise TypeError(f"Expected only numeric types, found {type(value)} in sequence.")
输出:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-791ea7c7a43e> in <module>
3 for value in my_list:
4 if not isinstance(value, (int, float)):
----> 5 raise TypeError(f"Expected only numeric types, found {type(value)} in sequence.")
TypeError: Expected only numeric types, found <class 'str'> in sequence.
因为你不想 for
循环使用 map
并获取列表中每个元素的类型,那么你可以使用 in
检查列表是否包含 sting:
seq = [0, 1, 2, 3, 4, "Hello"]
if str in map(type, seq):
print("List contains string")
else:
print("Accepted")
all()
在第一个计算结果为 False 的项目处停止。基本上:
if all(isinstance(x, (int, float)) for x in my_list):
print("all numbers!")
else:
print("not all number!")
并且使用这些 C 级函数而不是推导式应该更高效:
from itertools import repeat
if all(map(isinstance, my_list, repeat((int, float)))):
print("all numbers!")
else:
print("not all number!")