28

重複の可能性:
リストを要素が交互になっている2つのリストに分割するPythonプログラム

私はこのようなリストを持っています:

list1 = [blah, 3, haha, 2, pointer, 1, poop, fire]

私が欲しい出力は次のとおりです。

list = [3, 2, 1, fire]

だから私が欲しいのは、前者のリストの偶数要素のリストを作成することです。ステートメントを使用forして、リストに追加しているときに2番目の要素を削除しようとしましたが、うまくいきませんでした。

count = 0
for a in list1:
 list2.append(a)
 if count % 2 = = 1:
  list2.pop(count)

print list2

助言がありますか?

4

3 に答える 3

55

リストのスライスを使用できます。次のスニペットで十分です。

list1 = ['blah', 3, 'haha', 2, 'pointer', 1, 'poop', 'fire']
listOdd = list1[1::2] # Elements from list1 starting from 1 iterating by 2
listEven = list1[::2] # Elements from list1 starting from 0 iterating by 2
print listOdd
print listEven

出力

[3, 2, 1, 'fire']
['blah', 'haha', 'pointer', 'poop']
于 2012-07-28T15:48:42.603 に答える
45

これにより、必要なものが得られるはずです-オフセット0または1から定期的にリストをサンプリングします:

>>> a = ['blah', 3,'haha', 2, 'pointer', 1, 'poop', 'fire']
>>> a[0:][::2] # even
['blah', 'haha', 'pointer', 'poop']
>>> a[1:][::2] # odd
[3, 2, 1, 'fire']

上記の例では、最初のスライス操作 ( a[1:]) は目的の開始インデックスからすべての要素を選択する方法を示し、2 番目のスライス操作 ( a[::2]) はリスト内の他のすべての項目を選択する方法を示していることに注意してください。

他の人がコメントで指摘しているように、より慣用的で効率的なスライス操作は、2つを1つに結合します。つまり、a[::2](0は省略できます) とです。a[1::2]

于 2012-07-28T15:47:28.737 に答える
3

リストをスライスするだけです: 奇数の場合: 偶数a[1::2] の場合:a[::2]

于 2012-07-28T15:51:02.897 に答える