如果下列列表包含相同的元素,则删除所有以前的列表

2024-06-13 01:53:50 发布

您现在位置:Python中文网/ 问答频道 /正文

对于expample,我有一些列表:

[date1, time1, nickname1, point1 = 56.341708,43.948463]
[date2, time2, nickname2, point2 = 56.321795,43.9996]
[date3, time3, nickname3, point1 = 56.341708,43.948463]
[date4, time4, nickname4, point1 = 56.341708,43.948463]
[date5, time5, nickname5, point3 = 56.236278,43.960233]
[date6, time6, nickname7, point3 = 56.236278,43.960233]

我需要删除所有以前的名单,如果下面的名单有相同的点。 正确的输出应该是:

[date2, time2, nickname2, point2 = 56.321795,43.9996]
[date4, time4, nickname4, point1 = 56.341708,43.948463]
[date6, time6, nickname7, point3 = 56.236278,43.960233]

我的代码删除了一些列表,但它没有完全完成任务:

checked3-列表列表 选中4-点列表

代码:

r = -1
v = -2
k = -len(checked3)
try:
    while v > k:
        if str(checked4[r]) in checked3[v]:
            checked3.pop(v)
            print ('now', checked3)
            v = v - 1
        else:
            print ('else', checked3)
            r = r - 1
except:
    pass

你能帮我一下吗,我怎样才能得到正确的输出?你知道吗


Tags: 列表名单point1point2time2date2point3date4
2条回答

有一种方法:

  1. 创建点词典。你知道吗
  2. 从后面遍历列表(因为您希望保留最后一个值)
  3. 找到项目的第一个匹配项时标记
  4. 找到重复点时删除

为了简化解释,我用一个列表进行了模拟,其中字符串表示无关紧要的字段,元组表示点。你知道吗

listOfLists = [
['date1', 'time1', 'nickname1',  (56.341708,43.948463)],
['date2', 'time2', 'nickname2', (56.321795,43.9996)],
['date3', 'time3', 'nickname3', (56.341708,43.948463)],
['date4', 'time4', 'nickname4', (56.341708,43.948463)],
['date5', 'time5', 'nickname5', (56.236278,43.960233)],
['date6', 'time6', 'nickname7', (56.236278,43.960233)]
]

使用字典理解,为每一点创建一个记录

pointsDict = {item[3]:'Duplicates in list' for item in listOfLists}

从后面倒着走。我们通过改变点对应的值将其设置为“candelete”来标记删除。当我们遇到与迭代中的项相对应的值“candelete”时,我们将其从原始列表中删除。你知道吗

for item in listOfLists[::-1]:
    point = item[3]
    if pointsDict[point] == 'Duplicates in list':
        pointsDict[point] = 'Can delete'
    elif pointsDict[point] == 'Can delete':
        listOfLists.pop(listOfLists.index(item))

此时ListofList包含您想要的内容。你知道吗

这应该管用

distinctList = []
distinctDict = {}

for l in checked3:
    point = l[-1] #last element of inside list
    distinctDict[point] = l

for l in distinctDict:
    distinctList.append(distinctDict[l])

相关问题 更多 >