现在,我有一个包含三列和众多行的2D列表,每列包含一个独特类型的东西。第一列是UserID,第二列是时间戳,第三列是URL。该列表如下所示:从2D Python列表中提取独特元素,并将它们放入新的2D列表中
[[304070, 2015:01:01, 'http:something1'],
[304070, 2015:01:02, 'http:something2'],
[304070, 2015:01:03, 'http:something2'],
[304070, 2015:01:03, 'http:something2'],
[304071, 2015:01:04, 'http:something2'],
[304071, 2015:01:05, 'http:something3'],
[304071, 2015:01:06, 'http:something3']]
正如您所看到的,存在一些重复的URL,无论用户标识和时间戳如何。
我需要提取那些包含唯一URL的行,并将它们放入一个新的2D列表中。
例如,第二行,第三行,第四行和第五行都具有相同的URL,而不考虑用户ID和时间戳。我只需要第二行(第一个出现)并将其放入我的新2D列表中。话虽如此,第一行有一个唯一的URL,我也将它放到我的新列表中。最后两行(第六和第七)具有相同的URL,我只需要第六行。
因此,我的新名单应该是这样的:
[304070, 2015:01:01, 'http:something1'],
[304070, 2015:01:02, 'http:something2'],
[304071, 2015:01:05, 'http:something3']]
我想过用这样的事情:
for i in range(len(oldList):
if oldList[i][2] not in newList:
newList.append(oldList[i])
但显然这一次是不行的,监守oldList[i][2]
是一个元素, not in newList
正在检查整个2D列表,即检查每一行。这样的代码只会创建一个oldList
的确切副本。
或者,我可以消除那些有重复的URL的行,因为在一百万行的2D列表上使用for循环加追加操作符真的需要一段时间。
这似乎是对我不必要的空间使用。它可能会更快,但是对于普通的网址,它所占用的空间几乎是它的两倍。 – BoltKey
你是什么意思?你在说什么空间? – MattDMo
我的意思是物理记忆。您将所有的url保存在url_set中,这会分配更多的内存。还是Python以某种方式引用它的参考? – BoltKey