检查几个带有几个for循环的列表

时间:2018-04-05 12:41:05

标签: python list loops

keylist = ['A/P', 'A/Q', 'B/P', 'B/Q', 'C/P', 'C/Q']
List = ['A','B','C']

我想为List中的每个元素以及keylist中的每个元素进行操作:

for n in List:
    for key in keylist:
        if key.split('/')[0] == List[n] and key.split('/')[-1] == 'P':
            try:
                print(n) #placeholder
            except:
                pass

基本上,我想检查keylist的第一个拆分元素是List的元素,但输出是错误:

TypeError: list indices must be integers or slices, not str

3 个答案:

答案 0 :(得分:0)

因为您在List [n]中使用的n不是List中元素的索引。

for n in List:    # here n is not the index to element in list but element itself. 
    for key in keylist: # so you can't use List[n] below e.g. n is 'A' in first iteration
        if key.split('/')[0] == List[n] and key.split('/')[-1] == 'P':
            try:
                print(n) #placeholder
            except:
                pass

如果您需要列表中的元素索引,请使用以下代码。

for idx, ele in enumerate(List):
    for key in keylist:
        if key.split('/')[0] == List[idx] and key.split('/')[-1] == 'P':
            try:
                print(List[idx])  # or print(ele)
            except:
                pass

此处ele == List[idx]

答案 1 :(得分:0)

keylist = ['A/P', 'A/Q', 'B/P', 'B/Q', 'C/P', 'C/Q']
List = ['A','B','C']

for n in List:
    for key in keylist:
        if ((key.split('/')[0] in List) and (key.split('/')[1] == 'P')):
            try:
                print(n) #placeholder
            except:
                pass

答案 2 :(得分:0)

保持Zen of Python

  

Flat比嵌套

更好
for key in keylist:
    s = key.split('/')
    if s[0] in List and s[-1] == 'P':
        try:
            print(s[0]) #placeholder
        except:
            pass

只要List中的元素是唯一的,这将有效。您的算法将复制List中重复项的输出。这个算法不会。