8

リスト内の2つの隣接するアイテムを比較する方法を探しています。どちらの値が高いかを比較し、それに応じて並べ替えます。これはユーザーが入力するリストなので、ただの場合ではありません 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 の Web サイトには、並べ替えの方法に関する非常に優れたガイドがあります。

それがあなたの意図ではない場合..上に投稿したループの代わりに、別の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 に答える