我们假设您有一个字符串数组' x
',包含非常长的字符串,并且您想要搜索以下子字符串:" string。 str",在数组x
中的每个字符串中。
在x
元素的绝大多数中,所讨论的子字符串将位于数组元素中。然而,也许一两次,它不会成功。如果不是,那么......
1)有没有办法忽略这个案例,然后使用x
语句转到if
的下一个元素?
2)如果你有if
的任何特定元素中有许多不同的子串,那么有没有x
语句的方法可以做到这一点你最终可能会写出大量的if
陈述?
答案 0 :(得分:3)
您想要try
和except
阻止。这是一个简化的例子:
a = 'hello'
try:
print a[6:]
except:
pass
a = ['hello', 'hi', 'hey', 'nice']
for i in a:
try:
print i[3:]
except:
pass
lo
e
答案 1 :(得分:1)
您可以使用list comprehension简洁地过滤列表:
按长度过滤:
a_list = ["1234", "12345", "123456", "123"]
print [elem[3:] for elem in a_list if len(elem) > 3]
>>> ['4', '45', '456']
按子字符串过滤:
a_list = ["1234", "12345", "123456", "123"]
a_substring = "456"
print [elem for elem in a_list if a_substring in elem]
>>> ['123456']
通过多个子字符串过滤(通过比较filtered数组大小和子字符串数来检查所有子字符串是否在元素中):
a_list = ["1234", "12345", "123456", "123", "56", "23"]
substrings = ["56","23"]
print [elem for elem in a_list if\
len(filter(lambda x: x in elem, substrings)) == len(substrings)]
>>> ['123456']
答案 2 :(得分:0)
好吧,如果我理解你写的是什么,你可以使用continue
关键字跳转到数组中的下一个元素。
elements = ["Victor", "Victor123", "Abcdefgh", "123456", "1234"]
astring = "Victor"
for element in elements:
if astring in element:
# do stuff
else:
continue # this is useless, but do what you want, buy without it the code works fine too.
抱歉我的英文。
答案 3 :(得分:0)
使用any()
查看是否有任何子字符串位于x
的项目中。 any()
将使用生成器表达式并显示短路 beavior - 它将返回True
第一个表达式,其值为True
并停止消耗发电机。
>>> substrings = ['list', 'of', 'sub', 'strings']
>>> x = ['list one', 'twofer', 'foo sub', 'two dollar pints', 'yard of hoppy poppy']
>>> for item in x:
if any(sub in item.split() for sub in substrings):
print item
list one
foo sub
yard of hoppy poppy
>>>