我试图通过删除现有列表列表中具有重复值的行来创建一个新的列表列表。在
fir = [['a35',1],['a35',2],['3r',6],['3r',8],[5,9]]
sec = []
for row in fir:
if sec is None:
sec.append(row)
elif row[0] not in sec:
sec.append(row)
print(sec)
预期产量: [['a35',1],['3r',6],[5,9]]
实际产量: [['a35',1],['a35',2],['3r',6],['3r',8],[5,9]]
我想创建一个列表列表,其中行[0]的值是唯一的且不重复(例如,带有“a35”的行只应包含一次)
我怎样才能做到这一点?在
您当前的代码失败,因为在第一次迭代之后}中找不到这个值,因此它被附加到那里。在
sec
看起来像这样:[['a35',1]]
。在第二次迭代中,row
的值为['a35',2]
,而在{可以使用^{} 根据第一个元素对内部列表进行分组。
groupby
返回(key, it)
元组的iterable,其中key
是第二个参数返回的值,it
是组内元素的iterable:注意,上面假设第一个元素相同的列表在
^{pr2}$seq
中相邻。如果不是这样的话,您可以在将seq
传递给groupby
之前对其进行排序,但这只在第一个元素可以用作键的情况下有效。对于您的数据,情况并非如此,因为在Python3上有无法比较的字符串和整数。您可以将项目收集到OrderedDict
,但是:输出:
^{3}$使用列表理解来实现这一点:
这将从
fir
中选择每个项,并将该项的第一个元素与索引0
中的所有项进行比较,直到该项的索引为止。在因为你在内部列表中只有两项,你不想有重复项
您可以简单地保存唯一值(元组中的第一个数据),这是错误的,因为您将第一个元组与所有数据进行比较(比较'a35'和['a35',1])
相关问题 更多 >
编程相关推荐