簡體   English   中英

在 for 循環 python 中運行 elif 語句

[英]Running a elif statement in a for loop python

創建一個列表,在其中按列出的順序檢查和分配數字。 說如果它的名稱中有 COVER,那么它的 COVER 就沒有別的了。 如果 GLASS COVER 那么它是一個 COVER,但如果只有 GLASS 那么它的 GLASS 並且應該得到它的數字。 我的問題是,如果列表有 GLASS COVER,我的列表“List_MainNum”會在其中獲取兩個值,對於 COVER 和 GLASS,當我希望它只分配 COVER 時,然后忽略進一步循環。 我雖然 elif 語句會解決這個問題,但我錯了

values = ['COVER','COVER','COVER','COVER','COVER','GLASS COVER','GLASS COVER','GLASS COVER','GLASS COVER','GLASS COVER'
,'SPRING', 'SPRING','SPRING','SPRING','GLASS COVER','COVER', 'SPRING GLASS' ,'TEST','TEST','TEST']
a = []
b = []
List_Main = []
List_MainNum = []
def sub(x,y):
    a.append(text)
    b.append(y)

Remain_List = []

labels = [['COVER', 'SPRING', 'GLASS',], [46,125, 33]] 


for text in values:
    for i in range(len(labels[1])):
        if i==0 and labels[0][0] in text:           
            List_Main.append(text)
            List_MainNum.append(labels[1][0])

        elif labels[0][i] in text:
            sub(labels[0][i], labels[1][i]) 

def Lizt(f,g):
    List_MainNum.extend(b)
    List_Main.extend(a)

Lizt(a,b)

for xyz in values:
    if xyz not in List_Main:
        Remain_List.append(xyz)

List_Main.extend(Remain_List)

print (List_Main)
print (b)

不要一次處理一個鍵,這需要標記已經修復的值,而是嘗試一次考慮一個值並找出哪個鍵首先匹配它們。 后一個問題可以抽象為一個單獨的 function:

import operator,functools

def non_prefix(it,f):
  """
  For how many elements of an iterable does a function yield false?
  """
  ret=0
  for x in it:
    if f(x): break
    ret+=1
  return ret

data=["abc","ab","c","a","ab","bc","e"]
keys=["a","b","c","d"]

print([non_prefix(keys,functools.partial(operator.contains,d)) for d in data])

這將打印[0, 0, 2, 0, 0, 1, 4] 4 表示沒有任何鍵匹配,因此您應該拒絕該值或使用任何默認值(也許通過使用比keys長一個的labels列表)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM