通过修改原始列表就地重新排列列表,将偶数索引值放在前面

时间:2018-05-08 00:38:31

标签: python list slice indices in-place

我对python相对较新,我仍然在努力学习该语言的基础知识。我偶然发现了一个问题,要求您通过修改原件来重新排列列表。你应该做的是将所有偶数索引值移到前面(以相反的顺序),然​​后是奇数索引值。

示例:

class Program
    {
      public static void Main()
        {
            var address = new Address("56 Main St", "Mesa", "AZ", "38574");

        }

    }
    public class Address
    {
        public string Street { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public string ZipCode { get; set; }

        public Address(string Street, string City, string State, string ZipCode)
        {

        }
    }

    public class Customer 
    {
        public long Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }

        public Customer(string FirstName, string LastName)
        {

        }


    }
    public class Company
    {
        public string CompanyName { get; set; }

    }
}

我最初的方法是使用以下内容:

l = [0, 1, 2, 3, 4, 5, 6]
l = [6, 4, 2, 0, 1, 3, 5]

然而,显然这被认为是“创建一个新列表'而不是循环遍历原始列表来修改它。

因此,我希望得到一些关于如何处理这个特定问题的想法或提示。我知道我可以使用for循环或while循环遍历元素/索引,但我不知道如何进行交换或其他任何事情。

1 个答案:

答案 0 :(得分:6)

您可以通过分配列表切片而不是变量来执行此操作:

l[:] = l[::2][::-1] + l[1::2]

你对反转偶数元素的表达也是错误的。使用l[::2]获取所有偶数,然后使用[::-1]反转。

这实际上相当于:

templ = l[::2][::-1] + l[1::2]
for i in range(len(l)):
    l[i] = templ[i]

for循环修改原始列表。