繁体   English   中英

比较列表和列表列表时遇到问题

[英]Having trouble comparing lists and lists of list

我有一个整数列表和一个列表列表。 我需要比较两者。

列表列表有一个名称和一组整数。 我的列表只有一组整数。

我知道在 python 你可以说is list == list 但是,整数的顺序是导入的,在我的列表列表中,整数之前还有一个名称。

例如,我的列表将是4 1 6而我需要与之比较的列表将是bob 6 7 2 我只需要比较整数,如果我将4 1 61 6 41 4 6进行比较,则不会进行比较。

我试过使用循环,但没有得到我想要的结果。

chdnalist将是一个列表,只有一组 3 个整数。 dnalist是一个列表列表,一个列表是bob, 4, 1, 3下一个是alice 9, 6, 4

我需要将chdnalist中的三个整数与dna列表中的三个整数进行比较,如果匹配,则打印名称,包括顺序。

这是我正在尝试的一组循环。 目前 s 循环不会增加。

def compare(dnalist, chdnalist):
    for i in range(1, len(dnalist)):
        for s in range(1, len(dnalist[1])):
            print (s)
            if (chdnalist[i - 1] != dnalist[i][s]):
                break
            if (s == len(dnalist[1])):
                print (dnalist[i][0])
                return
            else:
                print ("No Match")
    return

这是 csv 文件的副本,它成为我的列表 (dnalist)。

name,AGATC,AATG,TATC
Alice,2,8,3
Bob,4,1,5
Charlie,3,2,5

我碰巧知道我用来创建列表的文本文件,当它被翻译时,我将它与它进行比较变成了4,1,5 (chdnalist)。 但是,当我 go 比较它们时,s 循环不会迭代。 它只运行一次。

迭代dnalist时,使用扩展分配将名称与整数分开。 然后你可以使用==来比较整数列表。

此外, No match应该只在循环结束时打印,而不是在每次迭代期间打印,因为以后可能会有匹配。

由于您从 CSV 文件中读取dnalist ,因此所有内容都将被读取为字符串,而不是整数。 在比较之前,您需要将它们转换为整数。

def compare(dnalist, chdnalist):
    for name, *dna in dnalist:
        dna = list(map(int, dna))
        if dna == chdnalist:
            print(name)
            return
    print("No match")

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM