Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
For循环删除项影响了错误的列表-Python_Python_Python 2.7 - Fatal编程技术网

For循环删除项影响了错误的列表-Python

For循环删除项影响了错误的列表-Python,python,python-2.7,Python,Python 2.7,我需要创建一个包含ID和一个不包含ID的日期列表。for循环在没有\u id的情况下作用于,那么为什么这两个使用\u id打印语句会产生不同的结果(缺少第1列) 输出: [[u'ID 1', datetime.datetime(2014, 12, 9, 0, 0), datetime.datetime(2015, 2, 17, 0, 0), datetime.datetime(2015, 3, 4, 0, 0), datetime.datetime(2015, 3, 13, 0, 0)], [u

我需要创建一个包含ID和一个不包含ID的日期列表。for循环在没有\u id的情况下作用于
,那么为什么这两个
使用\u id打印语句会产生不同的结果(缺少第1列)

输出:

[[u'ID 1', datetime.datetime(2014, 12, 9, 0, 0), datetime.datetime(2015, 2, 17, 0, 0), datetime.datetime(2015, 3, 4, 0, 0), datetime.datetime(2015, 3, 13, 0, 0)], [u'ID 2', datetime.datetime(2014, 12, 9, 0, 0), datetime.datetime(2015, 2, 17, 0, 0), datetime.datetime(2015, 3, 4, 0, 0), datetime.datetime(2015, 3, 13, 0, 0)]]


[[datetime.datetime(2014, 12, 9, 0, 0), datetime.datetime(2015, 2, 17, 0, 0), datetime.datetime(2015, 3, 4, 0, 0), datetime.datetime(2015, 3, 13, 0, 0)], [datetime.datetime(2014, 12, 9, 0, 0), datetime.datetime(2015, 2, 17, 0, 0), datetime.datetime(2015, 3, 4, 0, 0), datetime.datetime(2015, 3, 13, 0, 0)]]
由于带有\u id的
引用列表,因此没有\u id的
将不会引用同一列表。因此,当您从没有\u id的
中删除项目时,您正在从基础列表对象中删除项目,该对象与具有\u id的
仍在引用的列表相同。因此,对于引用同一对象的所有变量,将显示对同一对象的所有更改

您必须创建列表的副本,而不是复制引用。通常,您会这样做:

without_ids = with_ids[:]
但是,这只会复制外部列表,使其成为浅层副本。因为您的列表包含列表列表,所以您需要一个深度副本。在这一点上,它变得有点乏味

因此,您可以创建一个新列表,而不是创建副本,该列表只包含要保留的元素:

这是一个列表理解,它将使用_id
迭代
中的所有元素,只需选择除第一个元素之外的所有子列表元素(
elem[1://code>表示从第一个索引开始,然后获取所有内容),并从这些元素中创建一个新列表。

在语句中

without_ids = with_ids
您正在使不带\u id的
引用与带\u id的
相同的对象(这称为别名)

你能做什么?你可以制作一个(一个带有_id[:]
的简单副本不起作用,因为它是一个嵌套列表):

without_ids = with_ids[:]
without_ids = [elem[1:] for elem in with_ids]
without_ids = with_ids
import copy
without_ids = copy.deepcopy(with_ids)