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

时间:2012-12-23 16:21:11

标签: python list python-2.7

我正在寻找比较列表中两个相邻项目的方法,例如。比较哪个值更高,然后我会相应地对它们进行排序。它是用户将要输入的列表,因此不是公正的情况 if l[1] > l[2],因为我不知道列表的长度,所以 我需要在for循环中使用一般语句。

我有想法有类似的东西     for i in l: if x > i[index of x + 1]  但不知道如何找到变量的索引。 感谢任何帮助,谢谢

编辑:我知道内置的排序功能,但只是想通过创建自己的编码和算法编写来实现:)

4 个答案:

答案 0 :(得分:19)

您可以使用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

答案 1 :(得分:4)

快速而丑陋的解决方案就是这样(不要使用它!):

for i, item in enumerate(lst):
    # here you can use lst[i + 1] as long as i + 1 < len(lst)

然而,自己实施列表排序!如果要创建新列表,请使用.sort()进行就地排序或sorted()。关于如何在python网站上对事物进行排序有一个really good guide

如果那不是你的意图..而不是我在上面发布的循环,还有一个更好的方法来迭代another SO question中列表中的块:

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

答案 2 :(得分:1)

你也可以使用inbuilt reduce功能

e.g。 :

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.

希望它有所帮助。 :)

答案 3 :(得分: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 .. simple