2013-11-25 82 views
0

我有一個Python列表如下所示:去除Python列表循環子

['IKW', 'IQW', 'IWK', 'IWQ', 'KIW', 'KLW', 'KWI', 'KWL', 'LKW', 'LQW', 'LWK', 'LWQ', 'QIW', 'QLW', 'QWI', 'QWL', 'WIK', 'WIQ', 'WKI', 'WKL', 'WLK', 'WLQ', 'WQI', 'WQL'] 

如果我們挑,說第二個元素IQW,我們可以看到列表中有此項目但其不引人注意權的重複遠。這是因爲它是循環的。我的意思是以下是相同的。

IQWQWIWIQ

也可能是倒退,這也是重複的,所以我想它刪除。所以現在重複的名單是

IQWQWIWIQWQIIWQ(每一個這些的反向),QIW

所以基本上我想IQW是唯一一個離開。 獎勵積分,如果剩餘在列表中的獎勵積分按字母順序排序。

我做的方法是進行排序按字母順序排列的完整列表:

`IQW`, `QWI`, `WIQ` , `WQI`, `IWQ`, `QIW` -> 
`IQW`, `IQW`, `IQW`, `IQW`, `IQW` `IQW` 

,然後刪除重複的。 但是,這也消除組合,說我有ABCDCDAB。這些不一樣,因爲結尾只會遇到一次。但我的方法將它們排序到ABCDABCD並刪除一個。

我的代碼:

print cur_list 
sortedlist = list() 
for i in range(len(cur_list)): 
    sortedlist.append(''.join(map(str, sorted(cur_list[i])))) 
sortedlist = set(sortedlist) 

回答

0

這裏是我的編碼解決方案:如果任何人有更好的算法中,我會接受的答案:

mylist = list() 
for item in copy_of_cur: 
    linear_peptide = item+item  
    mylist = filter(lambda x: len(x) == 3 , subpeptides_linear(linear_peptide)) 
    for subitem in mylist: 
     if subitem != item: 
      if subitem in cur_list: 
       cur_list.remove(subitem) 
1
L = ['IKW', 'IQW', 'IWK', 'IWQ', 'KIW', 'KLW', 'KWI', 'KWL', 'LKW', 'LQW', 'LWK', 'LWQ', 'QIW', 'QLW', 'QWI', 'QWL', 'WIK', 'WIQ', 'WKI', 'WKL', 'WLK', 'WLQ', 'WQI', 'WQL'] 

seen = set() 
res = [] 
for item in L: 
    c = item.index(min(item)) 
    item = item[c:] + item[:c] 
    if item not in seen: 
     seen.add(item) 
     seen.add(item[0]+item[-1:0:-1]) 
     res.append(item) 

print res 

輸出:

['IKW', 'IQW', 'KLW', 'LQW']