2017-08-28 81 views
3

我有這樣的列表(例如):刪除日期和年份重複

mylist = [[20,'September 2015, August 2013, September 2016, September 2015'], [30, 'August 2012, August 2012']] 

和期望的輸出是這樣的:

mylist = [[20,'September 2015, August 2013, September 2016'], [30, 'August 2012']] 

基本上我想刪除日期和年份從每個時間的確切日期和年份重複像我的例子(2015年9月它重複 - 必須是月份和年份),我會有一些更大的字符串,但他們是像我的例子一樣,我怎麼可以實現我想要的輸出?謝謝!我使用python 3.

回答

2

假設順序並不重要:

>>> [[tup[0], ', '.join(d for d in set(tup[1].split(', ')))] for tup in mylist] 
[[20, 'August 2013, September 2015, September 2016'], [30, 'August 2012']] 
+0

謝謝先生!我必須接受這個答案,因爲它是最快的,我會看另一個也理解他們的方法! – Rommel

2

在循環中迭代您的項目並重新分配。您將受益於使用collections.OrderedDict來刪除重複項。

from collections import OrderedDict 

for i, l in enumerate(mylist): 
    mylist[i] = [l[0], ', '.join(OrderedDict.fromkeys(l[1].split(', ')).keys())] 

print(mylist)  
[[20, 'September 2015, August 2013, September 2016'], [30, 'August 2012']] 

這是假設你的日期由,準確分離,如果不是這種情況,就需要一個更復雜的解決方案。

+0

謝謝你,我會多看看這個。 – Rommel

0

這裏的濫用發電機和列表內涵式的解決方案 - 蟒蛇方式(TM)

from collections import OrderedDict 

mylist = [[20,'September 2015, August 2013, September 2016, September 2015'], [30, 'August 2012, August 2012']] 
mylist = [ 
    [x[0], ", ".join(OrderedDict.fromkeys([y.strip() for y in x[1].split(",")]).keys())] 
    for x in mylist 
] 

我佔列表中的項目古怪的格式,只是假設列表由,分離,在至少(因此September 2010,September 2010)仍然會被拾取並正確格式化)

+1

我也會多看看這個,謝謝! – Rommel

1

使用轉換列表以設置刪除重複的事實。下面的例子就是這樣做的 - 將字符串拆分爲一個列表,將其轉換爲一個集合,將其轉換回列表,並將其連接回一個字符串。

mylist = [[20,'September 2015, August 2013, September 2016, September 2015'], [30, 'August 2012, August 2012']] 
newlist = [] 
for item in mylist: 
    newlist.append([item[0], ", ".join(list(set(item[1].split(", "))))]) 
print(newlist) 

請注意,月份的順序可能不會保留 - 設置沒有排序。

1

這裏是另一種解決方案:

map(lambda x: [x[0]] + list(set([i.strip() for i in x[1].split(',')])), my list) 

[[20, 'August 2013', 'September 2015', 'September 2016'], [30, 'August 2012']] 
+0

我也會檢查一下,非常感謝你的時間! – Rommel

0

如果你沒事的順序被搞砸了,你可以將其更改爲一組,並將其改回列表。使用例如:

newlist = [[子列表[0], ''。加入(集(子列表[1] .split( '')))]在子列表MYLIST]

運行它我的結束,這是輸出:

[20, '2013年8月,2015年9月,2016年9月'],[30, '2012年8月']] 2012年,2012' 年8月,30]

相關問題