如何检查 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"

函数用途:

我尝试了一些方法,例如:

  1.  if str in my_list:  # return message
    
  2.  if "" in my_list:  # return message
    
  3.  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!")