簡體   English   中英

翻轉列表的一半並將 append 歸為自身

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM