使用python中的索引创建包含list子集的新列表

use*_*615 18 python indexing list subset

一个列表:

a = ['a', 'b', 'c', 3, 4, 'd', 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

我想要一个使用子集的列表a[0:2],a[4], a[6:],

那是我想要一个清单 ['a', 'b', 4, 6, 7, 8]

G. *_*hen 24

假设

a = ['a', 'b', 'c', 3, 4, 'd', 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

并且索引列表存储在

b= [0, 1, 2, 4, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

那么一个简单的单线解决方案就是

c = [a[i] for i in b]
Run Code Online (Sandbox Code Playgroud)


rlm*_*lms 20

试试new_list = a[0:2] + [a[4]] + a[6:].

或者更一般地说,这样的事情:

from itertools import chain
new_list = list(chain(a[0:2], [a[4]], a[6:]))
Run Code Online (Sandbox Code Playgroud)

这也适用于其他序列,并且可能更快.

或者你可以这样做:

def chain_elements_or_slices(*elements_or_slices):
    new_list = []
    for i in elements_or_slices:
        if isinstance(i, list):
            new_list.extend(i)
        else:
            new_list.append(i)
    return new_list

new_list = chain_elements_or_slices(a[0:2], a[4], a[6:])
Run Code Online (Sandbox Code Playgroud)

但请注意,如果列表中的某些元素本身就是列表,则会导致问题.为了解决这个问题,无论是使用以前的解决方案之一,或更换a[4]a[4:5](或更一般a[n]a[n:n+1]).