2
def checkio(data):
   s1=[]
   s2=[]
   data.sort()
   for x in reversed(data[0:len(data):2]):
       s1.append(x)
   for y in reversed(data[0:(len(data)-1):2]):
       s2.append(y)
   print(s1, s2)

checkio([5, 8, 13, 27, 14])

data[0:len(data):2] の反復が最後のインデックスのアイテムで開始する場合、data[0:(len(data)-1):2] の反復がインデックスだけのアイテムで開始されないのはなぜですか?ラスト前?

4

1 に答える 1

2

Reversed はリストを取り、それを反転します。
スライス表記はリストを反復処理し、新しいリストを返します。

reversedリストのスライス (ステッピングの有無にかかわらず) を呼び出すと、最初にスライスが作成され、次に反転されます。

たとえば、newL = reversed(L[0:len(L):2])次と同じです。

M = L[0:len(L):2]
newL = reversed(M)

したがって、 と言うreversed(L[0:len(L)-1:2])と、最初の要素から始まり、最後の要素を除く、L 内の他のすべての要素を含むリストに対して reversed が呼び出されます。

ちなみに、L[::2]は と同じでL[0:len(L):2]L[:-1:2]は と同じL[0:len(L)-1:2]です。また、順番L[::-1]L逆です。
この表記法は非常に強力です。

checkio([5, 8, 13, 27, 14])を に戻したい場合[14, 13, 5, 27, 8]は、いくつかの方法があります。

>>> L = [5, 8, 13, 27, 14]
>>> L[::-2] + L[-2::-2]
[14, 13, 5, 27, 8]

>>> L = [5, 8, 13, 27, 14]
>>> list(reversed(L))[::2] + list(reversed(L))[1::2]
[14, 13, 5, 27, 8]

>>> L = [5, 8, 13, 27, 14]
>>> list(itertools.chain(itertools.islice(reversed(L), 0, len(L), 2), itertools.islice(reversed(L), 1, len(L), 2)))
[14, 13, 5, 27, 8]

お役に立てれば

于 2013-07-17T02:11:37.370 に答える