Python复制到新列表并排除项目

时间:2019-07-06 08:53:54

标签: python

我在python3中有一个二维列表,看起来像这样...

[
    [
        'item1',
        'item2',
        'item3',
        'item4'
    ],
    [
        'item1',
        'item2',
        'item3',
        'item4'
    ],
    [
        'item1',
        'item2',
        'item3',
        'item4'
    ]
]

我正在尝试创建一个仅包含每个列表的item1和item 4的新列表,因此它看起来像这样。

[
    [
        'item1',
        'item4'
    ],
    [
        'item1',
        'item4'
    ],
    [
        'item1',
        'item4'
    ]
]

我当前正在遍历列表,并使用remove()命令删除元素。

这行得通,但是如果我遇到的情况是有数百种不同的物品,那将是无效的。

有没有一种方法可以复制到新列表,但仅保留每个列表中的[1]和[4]?

4 个答案:

答案 0 :(得分:1)

b = [item for x in a for item in x if x.index(item) in [0,3]]

让a作为您的主要列表。这将返回位置0,3的项目。此外,您可以根据需要将其他任何索引添加到该列表中。

答案 1 :(得分:1)

您可以通过两种方式做到这一点,即for循环或list comprehension

for循环:

new_list = []

for lst in main_list:
    new_list.append([lst[0], lst[-1]])

列表理解:

new_list = [[lst[0], lst[-1]] for lst in main_list]

main_list变量是您的原始列表。

希望这会有所帮助!

答案 2 :(得分:1)

您只需要像这样遍历列表:

result = [[lst[0], lst[3]] for lst in list_2d]

这称为列表理解,这是对列表进行循环的便捷方法。

list_2d是原始列表。

result是您想要的。

答案 3 :(得分:1)

这是功能编程方式:

f = lambda x, j0, j1: list(map(lambda i: [x[i][j0], x[i][j1]], range(len(x))))

x = [
    [
        'item1',
        'item2',
        'item3',
        'item4'
    ],
    [
        'item1',
        'item2',
        'item3',
        'item4'
    ],
    [
        'item1',
        'item2',
        'item3',
        'item4'
    ]
]

print(f(x, 0, -1))

# [['item1', 'item4'], ['item1', 'item4'], ['item1', 'item4']]