2012-12-23 103 views
2

我正在尋找一種方法來比較列表中的兩個相鄰項目,例如。比較哪個具有較高的價值,然後我會對它們進行相應的排序。這是一個用戶將要輸入的列表,因此我不知道列表的長度,所以它不是一個只有 if l[1] > l[2]的情況,所以我需要一個在for循環中使用的通用語句。如何比較相同列表中的兩個相鄰項目 - Python

我想到了類似於 for i in l: if x > i[index of x + 1] ,但不知道如何找到變量的索引。 任何幫助表示讚賞,感謝您

編輯:我所知道的內置的排序功能,但只是想通過創建我自己的:)

+2

你想排序嗎? –

回答

3

的快速和醜陋的解決方案來練習編碼和算法寫作會是這樣(不使用它!):

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 
+0

我確實想要對列表進行排序,並且知道排序功能,這只是我自己練習編碼的練習,而不是功能性的東西 –

+0

另外,您是否介意解釋您建議的第二種方法的工作原理?謝謝:) –

14

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

+1,打敗我。 –

+0

@Lattyware實際上是你3秒打我。 –

1

您還可以使用內置減少功能

例如, :

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) 

減少將自動執行我的照顧和i + 1

希望它能幫助。 :)

+0

我的函數如何通過reduce減少參數?列表中的a,b元素是? – AAI

+0

是的,a和b是列表的第i個和第i + 1個元素 – Somesh

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 ..簡單