[英]How to find the index of multiple sub string in a string by python?
我想在字符串中找到某些字符的位置,例如“ FC”或“ FL”。 對於像FC
這樣的單一情況,我使用find()
函數返回字符串中字符的索引,如下所示。
for line in myfile:
location = line.find('FC')
但是,當涉及添加FL
,如何在for循環中不使用if語句的情況下添加它? 我不想添加多余的行,因此希望有一個優雅的解決方案。
每行將包含“ FC”或“ FL”,但不能同時包含兩者。
每行將包含“ FC”或“ FL”,但不能同時包含兩者。
這使得以下一些棘手的技巧成為可能:
location = max(line.find(sub) for sub in ("FC", "FL"))
這個想法是,在兩個值中,一個將為-1,另一個將為正(找到它的索引),因此位置越大。
請注意,如果找到“ FC”,該方法仍將搜索“ FL”而不是找到它,如果要搜索的字符串很長,則會降低性能,而使用條件句的解決方案將避免這種冗余計算。 但是,如果字符串很短,則使用最少的python代碼並讓C進行所有思考可能是最快的(盡管如果確實很重要,則應測試一下情況)。
您也可以避免對此簡單的函數調用使用for理解:
location = max(map(line.find, ("FC", "FL")))
如果您想要最優雅的解決方案,那么有條件的解決方案可能就是您的解決方案。 它不會是“多余的”行,但是它將使您的代碼看起來不錯並且可讀:
for line in myfile:
location = line.find('FC')
if location == -1:
location = line.find('FL')
你可以這樣做:
for line in myfile:
location = [line.find(substring) for substring in ('FC', 'FL') if line.find(substring) != -1][0]
它類似於@NathanielFord建議的解決方案,唯一的區別是,我在生成器中添加了if line.find(substring) != -1
來解決我指出的問題,並將索引為零的元素移到同一行使它更短。 (@NathanielFord,很抱歉您在我在評論中提出建議之前刪除了答案)
雖然,這不是一個非常優雅的解決方案,因為它將兩次調用.find(),但比使用fors短。
尚不清楚您想要的輸出是什么,並且有更優雅的方式來處理它,但是實際上您正在尋找:
def multifind(line):
for substring in ['FC', 'FL']:
location = line.find(substring)
if location is not -1:
return location
return None
locations = [multifind(line) for line in myfile]
樣品運行:
myfile = ["abcFCabc","abFLcabc", "abc", ""]
>>> def multifind(line):
... for substring in ['FC', 'FL']:
... location = line.find(substring)
... if location is not -1:
... return location
... return None
...
>>> locations = [multifind(line) for line in myfile]
>>> locations
[3, 2, None, None]
請注意,這不如在for循環中使用if
的解決方案那么優雅。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.