如何在同一列表中比较相邻的两个项目 - Python

9
我正在寻找一种比较列表中相邻两个项的方法,例如比较哪个值更高,然后我将根据这个进行排序。这是用户将要输入的列表,所以不是简单的if l[1] > l[2]情况,因为我不知道列表的长度,所以我需要一个通用语句在for循环中使用。
我想到了类似于以下内容: for i in l: if x > i[x的索引+1] 但不知道如何找到变量的索引。 感谢任何帮助,谢谢
编辑:我知道有内置的sort函数,但只是想通过创建自己的代码和算法来练习编码。

2
你想对列表进行排序吗? - Rohit Jain
4个回答

29
你可以使用 zip():
In [23]: lis = [1,7,8,4,5,3]

In [24]: for x, y in zip(lis, lis[1:]):
   ....:     print x, y           # prints the adjacent elements
             # do something here
   ....:     
1 7
7 8
8 4
4 5
5 3

@Lattyware 实际上是你在三秒钟内击败了我。 - Ashwini Chaudhary

4
快速但不优雅的解决方案是这样的(不要使用它!):
for i, item in enumerate(lst):
    # here you can use lst[i + 1] as long as i + 1 < len(lst)

然而,不要自己实现列表排序!使用.sort()进行原地排序,或者使用sorted()如果您想创建一个新的列表。Python网站上有一篇非常好的指南介绍如何对事物进行排序。
如果这不是您的意图...与我上面发布的循环不同,在另一个SO问题中,还有一种更好的遍历列表块的方法。
import itertools
def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return itertools.izip_longest(fillvalue=fillvalue, *args)

你曾经喜欢过这个:
for x, y in grouper(2, lst):
    # do whatever. in case of an odd element count y is None in the last iteration

我确实想对列表进行排序,并且知道sort函数,但这只是我为了练习编码而设定的一个练习,而不是一个功能性的东西。 - Ricochet_Bunny
另外,您介意解释一下您建议的第二种方法是如何工作的吗?谢谢 :) - Ricochet_Bunny

1

你也可以使用内置的reduce函数

例如:

l = [1,2,3,4,5,6,7]

def my_function(a,b):
    # your comparison between a and b
    # return or print values or what ever you want to do based on the comparison


reduce(my_function, l)

reduce 会自动处理 i 和 i + 1。

希望能帮到你。:)


我的函数如何从 reduce 传递参数?a、b 是列表的元素吗? - AAI

0

有一个内置函数cmp,你可以用它来进行比较

我需要检查列表中的所有项是否相同,所以我这样做:

def compare(x, y):
    if x == y:
        return x
    return False

reduce(compare, my_list)

当你使用 [1,1,1,1,1,1] 运行它时,它会打印 1,当其中一个数字不匹配时,它会返回 False.. 简单易懂。

cmp 只适用于 Python 2。对于 Python 3,内置的 operator 中有很多类似的有用函数。 - Intrastellar Explorer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接