8

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

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

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

4

4 回答 4

28

您可以使用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
于 2012-12-23T16:25:32.270 回答
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
于 2012-12-23T16:23:17.750 回答
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。

希望能帮助到你。:)

于 2012-12-24T05:48:45.427 回答
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 .. 简单

于 2014-01-29T13:23:09.040 回答