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])
如果对数据[0:len(data):2]的迭代从具有最后一个索引的项开始,为什么迭代数据[0:(len(data)-1):2]不会从项目开始索引就在最后一个之前?
答案 0 :(得分: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中所有其他元素的列表中调用reverse,从第一个元素开始,并排除最后一个元素。
作为旁注,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]
希望这有帮助