如何使变量等于删除了项目的列表,而不更改原始列表?

时间:2017-10-12 02:54:52

标签: python list

我尝试从列表中删除删除项目,然后使其等同于另一个变量,同时仍保留原始列表。

代码:

print (len(desc1))
desc2 = []
for tuple in desc1:
    for line in tuple:
        if line.endswith(':'):
            desc2 = desc1.remove(tuple)
print (len(desc1))
print (desc2)

输出:

550 
200
None

我希望输出是什么:

550
550
200

我必须使用什么才能实现这一目标?

1 个答案:

答案 0 :(得分:1)

首先复制列表。

desc2 = desc1[:]  # shallow copy
for tuple in desc2:
    for line in tuple:
        if line.endswith(":"):
            desc2.remove(tuple)  # don't assign here

请注意,无论如何这都是一个坏主意,因为您正在重复列表(删除成员),因为您正在迭代它。此外,您使用list.remove数百次,而且速度并不快。而是考虑使用列表理解。

desc2 = [tup for tup in desc1 if not any(line.endswith(":") for line in tup)]
# or
desc2 = filter(lambda t: not any(line.endswith(":") for line in t), desc1)