清除列表和字典的最佳方法

时间:2014-02-11 08:45:14

标签: python python-2.7 dictionary

代码:

num_of_iterations_for_outer_loop = 2
num_of_iterations_for_inner_loop = 3
data = []

for j in range(num_of_iterations_for_outer_loop):
    lst2 = []
    for k in range(num_of_iterations_for_inner_loop):
        lst1 = {}
        lst1['1'] = "first_value"  # these are not default, in my original code they are coming from some other values after calculation
        lst1['2'] = "second_value"
        lst1['3'] = "third_value"

        lst2.append(lst1)

    value = {'values':lst2}
    data.append(value)

在外循环中,我必须一次又一次清除lst2列表以重复使用它。

在内部循环中,我必须一次又一次地清除lst1字典以重复使用它。

我知道清除列表的两种方法:

  1. del lst2[:]

  2. lst2 = []

  3. 和1清除字典的方法:

    1. lst1 = {}
    2. 但我不知道这些方法与我应该使用哪种方法之间存在差异。

      有没有其他方法可以清除列表和字典?这是更好的方法,为什么?

      有没有更好的方法来编写整个代码?

3 个答案:

答案 0 :(得分:4)

以下简要介绍每种方法的作用:

  1. lst2 = [] 实际清除列表内容。它只是创建一个新的空列表并将其分配给名称lst2。然后GC的任务是根据剩余的参考文献删除实际内容。

    >>> a = [1,2,3]
    >>> b = a
    >>> a = []
    >>> a
    []
    >>> b
    [1, 2, 3]
    
  2. del lst2[:]清除就地列表的内容。

    >>> a = [1,2,3]
    >>> b = a
    >>> del a[:]
    >>> a
    []
    >>> b
    []
    

    请注意,其他列表b也会被清除,因为内容已就地删除。

  3. lst1 = {}与第1点相同。它会创建一个空字典并指定对名称lst1的引用。

  4. 另一种清除列表的方法是:

    lst2[:] = []
    

答案 1 :(得分:1)

“清除”列表的两种方法之间的区别在于,第一种操作就地,删除原始列表对象的内容,而第二种方法只需创建一个新列表对象并将其指定为相同的名称。你必须在这里使用第二个版本,否则你字典中的所有列表都将是最后同一个清空列表的副本:

>>> l = [1, 2, 3]
>>> d = {'a': l}
>>> del l[:]
>>> d
{'a': []}

同样,您可以del来自字典的所有键值对,但您会遇到同样的问题。当您将原始容器对象放入其他容器时,您应该在每个循环中通过赋值(例如lst1 = {})创建一个新容器。

  

有没有更好的方法来编写整个代码?

我不知道你对数据做了什么,但字典value可能是不必要的,并且最内层数据的三元组就足够了:

data = [[(1, 2, 3), (4, 5, 6)], [(7, 8, 9), ...], ...]

答案 2 :(得分:0)

分配是清除列表或词典的非常好的有效方法。

my_dict = {}

my_list = []

不需要任何花哨的东西。