Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较元组列表_Python_List_Python 3.x_Tuples - Fatal编程技术网

Python 比较元组列表

Python 比较元组列表,python,list,python-3.x,tuples,Python,List,Python 3.x,Tuples,我想比较元组列表,如果第一个元素相同,那么比较第二个元素并返回最高值 lis = [(1,10, "n"), (1,15,"n1"), (2,20,"n"),(2,35,"n1"),(3,123,"n"),(3,12,"n1")] 返回: lis = [(1,15,"n1"), (2,35,"n1"), (3,123,"n")] 我不知道该怎么做,任何帮助都将不胜感激 使用和功能的解决方案: lis = [(1,10, "n"), (1,15,"n1"), (2,20,"n"),(2,35,

我想比较元组列表,如果第一个元素相同,那么比较第二个元素并返回最高值

lis = [(1,10, "n"), (1,15,"n1"), (2,20,"n"),(2,35,"n1"),(3,123,"n"),(3,12,"n1")]
返回:

lis = [(1,15,"n1"), (2,35,"n1"), (3,123,"n")]
我不知道该怎么做,任何帮助都将不胜感激

使用和功能的解决方案:

lis = [(1,10, "n"), (1,15,"n1"), (2,20,"n"),(2,35,"n1"),(3,123,"n"),(3,12,"n1")]
result = [max(lis[i:i+2]) for i in range(0, len(lis), 2)]

print(result)
输出:

[(1, 15, 'n1'), (2, 35, 'n1'), (3, 123, 'n')]
解决方案使用和功能:

lis = [(1,10, "n"), (1,15,"n1"), (2,20,"n"),(2,35,"n1"),(3,123,"n"),(3,12,"n1")]
result = [max(lis[i:i+2]) for i in range(0, len(lis), 2)]

print(result)
输出:

[(1, 15, 'n1'), (2, 35, 'n1'), (3, 123, 'n')]

元组比较已经做到了这一点,首先比较第一个元素,然后比较第二个元素,并继续进行,直到找到一个打破僵局的元素

您需要做的就是
zip
以这种方式创建正确的比较列表:

zip(lis[::2], lis[1::2])
# This produces:
# (1, 10, 'n') (1, 15, 'n1')
# (2, 20, 'n') (2, 35, 'n1')
# (3, 123, 'n') (3, 12, 'n1')
创建所需的对,然后可以在列表中对它们进行比较,以获得想要的结果:

r = [i if i > j else j for i,j in zip(lis[::2], lis[1::2])]
print(r)
# [(1, 15, 'n1'), (2, 35, 'n1'), (3, 123, 'n')]

元组比较已经做到了这一点,首先比较第一个元素,然后比较第二个元素,并继续进行,直到找到一个打破僵局的元素

您需要做的就是
zip
以这种方式创建正确的比较列表:

zip(lis[::2], lis[1::2])
# This produces:
# (1, 10, 'n') (1, 15, 'n1')
# (2, 20, 'n') (2, 35, 'n1')
# (3, 123, 'n') (3, 12, 'n1')
创建所需的对,然后可以在列表中对它们进行比较,以获得想要的结果:

r = [i if i > j else j for i,j in zip(lis[::2], lis[1::2])]
print(r)
# [(1, 15, 'n1'), (2, 35, 'n1'), (3, 123, 'n')]

我将使用
itertools.groupby
首先将具有相同第一个元素的所有项目分组在一起,然后使用
max
查找具有最大第二个元素的项目

与其他答案不同的是,您可能有来自不同“组”的不同数量的元素


我将使用
itertools.groupby
首先将具有相同第一个元素的所有项目分组在一起,然后使用
max
查找具有最大第二个元素的项目

与其他答案不同的是,您可能有来自不同“组”的不同数量的元素


仅当列表中每个“类型”包含2个元素时,这才有效。从示例和缺少明确的注释来判断,我非常确定这是@DeepSpace的唯一情况。如果需要,可以使用
zip_longest
fillvalue
()
result=[[j,i][i>j]对于zip中的i,j(lis[::2],lis[1::2])
在某种程度上更“pythonic”,不是吗?@Claudio我不会这么说。这显然不如这里的解决方案可读。四处搜索,你会看到其他人对你正在使用的索引技巧以及它是如何绊倒他们的一些问题:-)只有当列表包含每个“类型”的2个元素时,这才会起作用。从样本和缺少明确的注释来判断,我很确定这是@DeepSpace的唯一情况。如果需要,可以使用
zip_longest
fillvalue
()
result=[[j,i][i>j]对于zip中的i,j(lis[::2],lis[1::2])
在某种程度上更“pythonic”,不是吗?@Claudio我不会这么说。这显然不如这里的解决方案可读。四处搜索,你会看到其他人对你正在使用的索引技巧以及它是如何绊倒他们的一些问题:-)只有当列表包含每个“类型”的2个元素时,这才有效。@DeepSpace这是什么意思?@qwertyayyy如果
lis=[(1,10,“n”),(1,15,“n1”),(1,20,“n1”),(2,20,“n”),(2,35,“n1”),(3123,“n”),(3,12,“n1”)]
@DeepSpace谢谢你。这正是我想要代码做的。这只在列表中包含每种“类型”的2个元素时才起作用。@DeepSpace这是什么意思?@qwertyayyy如果
lis=[(1,10,“n”),(1,15,“n1”),(1,20,“n1”),(2,20,“n”),@,(2,35,“n1”),(3123,“n”),(3,12,“n1”)]
@DeepSpace谢谢你。这正是我想要代码做的。