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

Python 检查列表中是否至少有一个以特定字符开头的元素,python,startswith,Python,Startswith,我有一个包含一组数字的列表(str),我想检查列表中是否至少有一个以'+'开头的元素 我的代码的问题是,如果没有以'+'开头的数字,就会出现无限循环,我需要更好的解决方案吗 my_list = ['11112352', '222222003', '5682052003', '21543003', '98756003', '+004454883'] while True: for number in my_list: if number.startswith('+'):

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

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

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

如果没有必要,for循环将已经检查列表中的每个项目

为了更清楚,如果它打印每个迭代:

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

因此,正如您所看到的,while循环是不必要的

这:

如果没有必要,for循环将已经检查列表中的每个项目

为了更清楚,如果它打印每个迭代:

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


因此,正如您所看到的,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

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

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
使用以下方法:

输出:

True
使用以下方法:

输出:

True

如果您只需要
True
/
False
结果,您可以尝试以下方法:

any(number for number in my_list if number[0] == "+")
如果作为参数传递的列表中至少有一个元素是
True
,则函数any传递
True


根据建议进行编辑。另请参见

如果您只需要一个
True
/
False
结果,您可以尝试以下方法:

any(number for number in my_list if number[0] == "+")
如果作为参数传递的列表中至少有一个元素是
True
,则函数any传递
True


根据建议进行编辑。另请参见您可以借助
for
循环和
标志
变量来执行此操作:

flag = 0

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

print(flag)

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

开头。您可以借助
for
循环和
标志
变量来完成此操作:

flag = 0

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

print(flag)

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

开头,要检查是否有任何元素以
'+'
开头,请使用内置函数和。您几乎可以将确切的单词写成Python代码:

starts_with_plus = any(element.startswith('+') for element in my_list)
这将返回一个布尔值。在条件为
True
的第一个实例中,这也会返回,就像从循环中返回一样,这使得它非常有效

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

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

starts_with_plus = starts_with(my_list, '+')

要检查是否有任何元素以“+”开头,请使用内置函数和。您几乎可以将确切的单词写成Python代码:

starts_with_plus = any(element.startswith('+') for element in my_list)
这将返回一个布尔值。在条件为
True
的第一个实例中,这也会返回,就像从循环中返回一样,这使得它非常有效

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

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

starts_with_plus = starts_with(my_list, '+')

避免使用
while
循环来解决此类问题,如果可能的话,请坚持使用just for循环,因为您所做的只是迭代listHi的每个元素!欢迎来到SO!请说明为什么需要
while
循环?您的问题需要遍历列表中的每个元素,如果字符串以+开头,则中断。因此while循环是不必要的。嘿,谢谢,我的问题是检查列表中是否至少有一个以“+”开头的元素,我在寻求更好的解决方案。在我的回答中,只需使用一部分
[0]
。我们可以对一个或多个字符使用startswith,这是一种更通用的解决方案,我们可以应用于不同的情况,这就是为什么我接受使用
而使用
循环来解决此类问题的itAvoid,如果可能的话,坚持使用just for循环,因为您所做的只是迭代listHi的每个元素!欢迎来到SO!请说明为什么需要
while
循环?您的问题需要遍历列表中的每个元素,如果字符串以+开头,则中断。因此while循环是不必要的。嘿,谢谢,我的问题是检查列表中是否至少有一个以“+”开头的元素,我在寻求更好的解决方案。在我的回答中,只需使用一片
[0]
。我们可以使用startswith来表示一个或多个字符,这是一个更通用的解决方案,我们可以应用于不同的情况,这就是为什么我接受它的原因。例如,如果列表非常长,并且第一个元素以
+
开头,您仍然会不必要地检查列表中的每个元素。例如,如果列表非常长,并且第一个元素以
+
开头,则会出现此问题,您仍然会不必要地检查列表中的每个元素。这是低效的,因为它需要在返回
True
/
False
之前处理所有字符串。请参阅我的答案,以了解使用
any
的正确方法。在这里,随附的
[]
实际上会适得其反,因为它们会强制对整个列表进行评估。这是低效的,因为它需要在返回
True
/
False
之前处理所有字符串。请参阅我的答案,以了解使用
any
的正确方法。在这里,随附的
[]
实际上是适得其反的,因为它们会迫使对整个列表进行评估。