[英]Compare all elements of a list of list Python
这是我列表的一部分。 我的原始清单有30多个项目:
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]]]
我需要比较我的所有项目a
。 我的意思是,如果我的第一个项目的前9个项目等于其他项目的前9个项目,则"1, 2, 3, 4, 5, 6, 7, 8, 9"
比较项目的[1]最后一项。
我打电话ITEM2像其他项目的a
列表
lista = []
for item in a:
print item
>>> [[1, 2, 3, 4, 5, 6, 7, 8, 9], [0.4, 3]]
>>> [[1, 2, 3, 4, 5, 6, 7, 8, 9], [1.8, 1]]
if item[:1] == item2[:1]:
if item[9][1] <= item2[9][1]:
lista.append(item)
if item[9][1] > item2[9][1]:
lista.append(item2)
print lista
>>> [[1, 2, 3, 4, 5, 6, 7, 8, 9, [1.8, 1]]
这是(一种)功能方法(我还没有在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)) # []
请注意, a[9][1]
不是该元素中的第一项,它是第二项,因为列表从0开始,第一项是a[9][0]
。您的问题是(除其他事项外)您执行的迭代次数。 考虑一下,如果n
是列表中元素的数量,并且对于任何给定元素x
您都将其与列表中的每个元素进行比较,那么您应该对列表进行n^n
次遍历。 而a for item in a: ...
仅在列表中迭代n
次。
# our list of lists whom have the same first element and last item
lista = []
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]]]
for i in range(len(a)):
for y in range(len(a)):
# lets check if the first element in each array is the same.
if a[i[:1]] == a[y[:1]]:
# if we got here then the first elements must be the same so lets compare second item of the last elements
if a[i[-1]][1] == a[y[-1]][1]:
# if we got here then the 2nd item of the last elements must be the same.
lista.append(a[i] + a[y])
Soloution
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。 ..)使用a[i][0]
到所有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 v 1)进行比较。 如果item
是<=
我们可以append.item
,如果item
是>
,则我们添加比较集append(a[i])
。
更新:注意到您想比较最后一组的item[1]
而不是最后一组的第一项。
另外,请务必考虑到此解决方案将自身与v进行比较。要绕过此问题,可以if item == a[i]: continue
投诉
我唯一的问题是您要完成的工作。
当您同时比较
>
和
<
。
当第一个集合经过测试时,.4会变少会追加它的集合,但是当我们比较1.8而更大时,您会再次追加.4集合...
您可以修改并添加if item not in lista
以及if 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])
但是即使您仍然总是会
append
较小的
item
因此您最好只评估
<=
并在
append
之前检查
lista
我错了,我忘记了我们也要追加相等的内容,因此希望您能找到该解决方案!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.