检查列表中是否至少有一个以特定字符开头的元素

Check if there is at least one element starting with specific character in a list

我有一个包含一组数字 (str) 的列表,我想检查列表中是否至少有一个以 '+' 开头的元素。

我的代码的问题是如果没有以'+'开头的数字会出现死循环,我需要更好的解决方案吗?

my_list = ['11112352', '222222003', '5682052003', '21543003', '98756003', '+004454883']
while True:
    for number in my_list:
        if number.startswith('+'):
            break
my_list = ['11112352', '222222003', '5682052003', '21543003', '98756003', '+004454883']
for number in my_list:
    if number.startswith('+'):
        break

这个:

while True:

不需要,for 循环会检查列表中的每一项

为了更清楚,如果每次迭代都打印:

my_list = ['11112352', '222222003', '5682052003', '21543003', '98756003', '+004454883']
for number in my_list:
    print(number)
    if number.startswith('+'):
        break

我明白了

11112352
222222003
5682052003
21543003
98756003
+004454883

所以你可以看到 while 循环是不必要的

这是一个更简单的解决方案:

my_list = ['11112352', '222222003', '5682052003', '21543003', '98756003', '+004454883']
result = [x for x in my_list if x.startswith('+')]
if result:
    # do something if result is not empty
else:
    # result is empty -- no '+' entries in my_list

使用any方法:

my_list = ['11112352', '222222003', '5682052003', '21543003', '98756003', '+004454883']
print(any(s[0] == '+' for s in my_list))

输出:

True

如果你只需要 True/False 结果,你可以试试这个:

any(number for number in my_list if number[0] == "+")

如果作为参数传递的列表中至少有一个元素是 True.

,则函数 any 会传递 True

根据Ann Zen. See also How exactly any works

的建议编辑

您可以借助 for 循环和 flag 变量来完成此操作:

flag = 0

for item in my_list:
    if item.startswith('+'):
        flag = 1
        break

print(flag)

如果得到 0 的输出,那么很明显没有元素以 + 开头。另一方面,如果 print 语句的输出是 1,则至少有一个元素以 +.

开头

要检查是否有任何元素以 '+' 开头,请使用内置函数 any and str.startswith。您几乎可以写下准确的单词 Python 代码:

starts_with_plus = any(element.startswith('+') for element in my_list)

这将 return 一个布尔值。这也将 return 在条件为 True 的第一个实例中,就像 return 跳出循环,从而非常有效。

如果您还想检查其他前缀,只需将其放在一个小函数中即可:

def starts_with(lst, prefix):
    return any(element.startswith(prefix) for element in lst)

starts_with_plus = starts_with(my_list, '+')