检查列表中是否至少有一个以特定字符开头的元素
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, '+')
我有一个包含一组数字 (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
.
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, '+')