亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

子列表的唯一元素取決于子列表中的特定值

子列表的唯一元素取決于子列表中的特定值

哈士奇WWW 2022-07-26 16:34:32
我試圖從一個非常不一致的列表中選擇唯一的數據集。我的數據集 RawData 由不同長度的字符串項組成。有些項目出現多次,例如:比較['a','b','x','15/30']項目 的關鍵始終是最后一個字符串:例如'15/30'目標是:獲取一個列表:UniqueData,其中包含僅出現一次的項目。(我想保持訂單)數據集:RawData = [['a','b','x','15/30'],['d','e','f','g','h','20/30'],['w','x','y','z','10/10'],['a','x','c','15/30'],['i','j','k','l','m','n','o','p','20/60'],['x','b','c','15/30']]我想要的解決方案數據集:UniqueData = [['a','b','x','15/30'],['d','e','f','g','h','20/30'],['w','x','y','z','10/10'],['i','j','k','l','m','n','o','p','20/60']]我嘗試了許多可能的解決方案,例如:for index, elem in enumerate(RawData):并附加到一個新列表,如果......for element in list不起作用,因為項目不完全相同。你能幫我找到解決問題的方法嗎?
查看完整描述

4 回答

?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

刪除重復項的最佳方法是將它們添加到集合中。將最后一個元素添加到setas 以跟蹤所有唯一值。當您要添加的值已經存在于集合中unique時,如果不存在則不執行任何操作,添加要設置的值unique并將 lst 附加到結果列表中new。


嘗試這個。


new=[]

unique=set()

for lst in RawData:

     if lst[-1] not in unique:

         unique.add(lst[-1])

         new.append(lst)


print(new)

#[['a', 'b', 'x', '15/30'],

 ['d', 'e', 'f', 'g', 'h', '20/30'],

 ['w', 'x', 'y', 'z', '10/10'],

 ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60']]


查看完整回答
反對 回復 2022-07-26
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

您可以為唯一數據設置一個新數組并跟蹤您迄今為止看到的項目。然后,當您遍歷數據時,如果您之前沒有看到該列表中的最后一個元素,則將其附加到唯一數據并將其添加到已看到的列表中。


RawData = [['a', 'b', 'x', '15/30'], ['d', 'e', 'f', 'g', 'h', '20/30'], ['w', 'x', 'y', 'z', '10/10'],

           ['a', 'x', 'c', '15/30'], ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60'], ['x', 'b', 'c', '15/30']]

seen = []

UniqueData = []

for data in RawData:

    if data[-1] not in seen:

        UniqueData.append(data)

        seen.append(data[-1])


print(UniqueData)

輸出


[['a', 'b', 'x', '15/30'], ['d', 'e', 'f', 'g', 'h', '20/30'], ['w', 'x', 'y', 'z', '10/10'], ['i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', '20/60']]


查看完整回答
反對 回復 2022-07-26
?
米脂

TA貢獻1836條經驗 獲得超3個贊

使用集合過濾掉已經看到密鑰的條目是最有效的方法。

這是一個使用具有內部副作用的列表理解的單行示例:

UniqueData = [rd for seen in [set()] for rd in RawData if not(rd[-1] in seen or seen.add(rd[-1])) ]



查看完整回答
反對 回復 2022-07-26
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

    RawData = [['a','b','x','15/30'],['d','e','f','g','h','20/30'],['w','x','y','z','10/10'],['a','x','c','15/30'],['i','j','k','l','m','n','o','p','20/60'],['x','b','c','15/30']]


seen = []

seen_indices = []


for _,i in enumerate(RawData):

  # _ -> index

  # i -> individual lists

  if i[-1] not in seen:

   seen.append(i[-1])

  else:

   seen_indices.append(_)


for index in sorted(seen_indices, reverse=True):

    del RawData[index]


print (RawData)


查看完整回答
反對 回復 2022-07-26
  • 4 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號