微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在for循环python

如何解决在for循环python

创建一个列表,在该列表中按照列出的顺序检查并分配数字。假设它的名称中包含COVER,则说明其COVER,仅此而已。如果是GLASS COVER,则为COVER,但如果只有GLASS,则为其GLASS,并应获得与其相配的编号。我的问题是,如果该列表具有GLASS COVER,则我的列表“ List_MainNum”在其中获得两个值,当我希望仅为其分配COVER时,对于COVER和GLASS都将得到两个值,然后在进一步的循环中将其忽略。我虽然可以通过elif语句解决这个问题,但是我错了

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

Remain_List = []

labels = [['COVER','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)

解决方法

与其一次只处理一个密钥,而不必对每个已固定的值进行标记,请尝试一次考虑一个值,然后找出最先匹配它们的键。后一个问题可以抽象为一个单独的函数:

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","bc","e"]
keys=["a","b","d"]

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

这将打印[0,2,1,4]; 4表示没有匹配的键,因此您应该拒绝该值或对其使用任何默认值(也许通过labels列表长于keys来实现)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。