比较列表Python列表的所有元素

时间:2018-08-24 21:48:19

标签: python list

这是我列表的一部分。我的原始清单有30多个项目:

index.html

我需要比较a = [[[1, 2, 3, 4, 5, 6, 7, 8, 9], [0.4, 3]], [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1.8, 1]]] 中的所有项目。我的意思是,如果我的第一个项目的前9个项目等于其他项目的前9个项目,则a比较最后一个项目的项目[1]。

我将item2称为"1, 2, 3, 4, 5, 6, 7, 8, 9"列表中的其他项目

a

3 个答案:

答案 0 :(得分:0)

这是(一种)功能方法(我还没有在Python 2.x上尝试过):

from operator import itemgetter

def get_lista(a):
     if a and len(set(map(' '.join, map(str, map(itemgetter(0), a))))) == 1:
          return [a[0][0]] + [min(map(itemgetter(1), a), key=itemgetter(1))]
     return []

a = [[[1, 2, 3, 4, 5, 6, 7, 8, 9], [0.4, 3]], [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1.8, 1]]]
lista = get_lista(a)
print(lista) # [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1.8, 1]]

get_lista(a)将返回一个空列表[],如果a为空,或者a的每个项目的第一个子项目都不匹配。

a = [[[1, 2, 3, 4, 5, 6, 7, 8, 9], [0.4, 3]], [[2, 3, 4, 5, 6, 7, 8, 9, 10], [1.8, 1]]]
print(get_lista(a)) # []

答案 1 :(得分:0)

请注意,a[9][1]不是该元素中的第一项,它是第二项,第一项是a[9][0],因为列表从0开始。您的问题(除其他外)是数字您执行的迭代次数。考虑一下,如果n是列表中元素的数量,并且对于任何给定元素x,您都将其与列表中的每个元素进行比较,那么您应该遍历列表{{ 1}}次。而n^n仅对列表for item in a: ...进行迭代。

n

答案 2 :(得分:0)

解决方案

a = [[[1, 2, 3, 4, 5, 6, 7, 8, 9],[0.4, 3]],[[1, 2, 3, 4, 5, 6, 7, 8, 9],[1.8, 1]]]

lista = []
for item in a:
    for i in range(0, len(a)): #changed loop method
        if item[0] == a[i][0]:
            if item[1][1] <= a[i][1][1]: #changed to item[1] of last set
                lista.append(item)
            elif item[1][1] > a[i][1][1]:
                lista.append(a[i])

print(lista)

输出

(xenial)vash@localhost:~/pcc/9$ python3 help.py
[[[1, 2, 3, 4, 5, 6, 7, 8, 9], [0.4, 3]], [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1.8, 1]]]
(xenial)vash@localhost:~/pcc/9$ 

这很有趣,很有趣!

因此每个item中都有一组item,首先我们需要将item[0]与所有item[0]进行比较,但只能比较一次,因此我将item[0](1、2 ...)与使用item[0]的所有a[i][0]进行了比较。如果item[0] == a[i][0],那么我们可以比较下一组。 接下来,我们将item[1][0]a[i][1][0](.04 v 1.8)进行比较。接下来,我们将item[1][1]a[i][1][1](3 vs 1)进行比较。如果item<=,我们可以append.item,如果item>,我们将附加比较集append(a[i])

已更新:注意,您想比较最后一组的item[1]而不是最后一组的第一项。

还请考虑此解决方案将自身与v进行比较 要绕过此操作,您可以添加if item == a[i]: continue

投诉

我唯一的问题是您要完成的工作。比较><时。当测试第一组时,.4会少一些,它将追加它的集合,但是当我们比较1.8而它越大时,您又将.4种集合追加了...

您可以修改并添加if item not in listaif a[i] not in lista来检查是否要在lista中添加您要添加​​的内容

        if item[1][0] <= a[i][1][0]:
            if item not in lista:
                lista.append(item)
        elif item[1][0] > a[i][1][0]:
            if a[i] not in lista:
                lista.append(a[i])

但是,即使您仍然总是appenditem,所以您最好只评估<=并在lista中进行检查您append

我错了,我忘了我们也要追加相等的内容,因此希望此解决方案是您所要的!