【问题标题】:Flip half of a list and append it to itself翻转列表的一半并将其附加到自身
【发布时间】:2021-12-07 02:55:42
【问题描述】:

我试图翻转列表中的一半元素,然后将其用于自身,例如, 如果我将列表 [1, 8, 7, 2, 9, 18, 12, 0] 传递给它,我应该得到 [1, 0, 7, 18, 9, 2, 12, 8] 出来,这是我的当前代码

def flip_half(list):
    for i in range(0,len(list)):
        if i % 2 != 0:
            listflip = list[i] 
            print(listflip)
    
            
    return list

【问题讨论】:

    标签: python python-3.x list


    【解决方案1】:

    您可以在 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]
    

    【讨论】:

    • 但此代码的结果不正确,长度为奇数。
    • 不清楚(至少对我而言)这个问题对于奇数长度的输入是否有意义。
    • 我同意你的看法。不清楚任务。我认为安全版本是l[1::2] = l[1::2][::-2]
    【解决方案2】:

    如果你想循环执行:

    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]))
    

    【讨论】:

    • 或[list[i] if i % 2 == 0 else list[-(i + len(list)%2)] for i in range(len(list))]
    【解决方案3】:

    如果您需要具有奇数索引的元素具有相反的顺序,那么下一个解决方案之一(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))]
    

    功能

    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)
    

    生成器函数

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-11
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      相关资源
      最近更新 更多