[英]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.