[英]Flip half of a list and append it to itself
我試圖翻轉列表中的一半元素,然后將其用於自身,例如,如果我將列表 [1, 8, 7, 2, 9, 18, 12, 0] 傳遞給它,我應該得到[1, 0, 7, 18, 9, 2, 12, 8] out,這是我當前的代碼
def flip_half(list):
for i in range(0,len(list)):
if i % 2 != 0:
listflip = list[i]
print(listflip)
return list
您可以直接在 python 中分配切片。 因此,如果您可以確定要從中分配的切片,則可以直接更改元素。 這從反向l[::-2]
中的每個其他元素分配給從第二個開始的每個其他元素: l[1::2]
:
l = [1, 8, 7, 2, 9, 18, 12, 0]
l[1::2] = l[::-2]
print(l)
#[1, 0, 7, 18, 9, 2, 12, 8]
如果您想循環執行此操作:
def flip_half(list):
out = []
for i in range(0,len(list)):
if i % 2 != 0:
out.append(list[-i])
else:
out.append(list[i])
return out
print(flip_half([1, 8, 7, 2, 9, 18, 12, 0]))
如果您需要具有奇數索引的元素具有相反的順序,那么下一個解決方案之一( l
- 是您的列表):
切片
l[1::2] = l[1::2][::-1]
列表理解
l = [l[i] if i % 2 == 0 else l[-(i + len(l)%2)] for i in range(len(l))]
Function
def flip_half(lst):
res= []
for i in range(len(lst)):
if i % 2 != 0:
res.append(lst[-(i + len(lst) % 2)])
else:
res.append(lst[i])
return res
l = flip_half(l)
發電機 function
def flip_half(lst):
for i in range(len(lst)):
if i % 2 != 0:
yield lst[-(i + len(lst) % 2)]
else:
yield lst[i]
l = list(flip_half(l))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.