Python 2.7 从python列表中删除循环子字符串
我有一个Python列表,如下所示:Python 2.7 从python列表中删除循环子字符串,python-2.7,Python 2.7,我有一个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,我们会看到列表中有该项的重复项,但是它不会立即被注意到。这是因为它是循环的
['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
,我们会看到列表中有该项的重复项,但是它不会立即被注意到。这是因为它是循环的。我的意思是,以下是等效的
IQW
,QWI
,WIQ
它也可以是向后的,这也是一个重复,所以我希望它删除。因此,现在重复的列表是(每一个的相反)
IQW
,QWI
,WIQ
,WQI
,IWQ
,QIW
所以本质上,我希望IQW
是唯一剩下的一个。
如果列表中剩余的一个按字母顺序排序,则奖励积分
我的做法是按字母顺序对整个列表进行排序:
`IQW`, `QWI`, `WIQ` , `WQI`, `IWQ`, `QIW` ->
`IQW`, `IQW`, `IQW`, `IQW`, `IQW` `IQW`
然后删除重复项。
但是,这也删除了组合,比如我有ABCD
和CDAB
。它们不一样,因为两端只相交一次。但我的方法将它们排序为ABCD
和ABCD
并删除一个
我的代码:
print cur_list
sortedlist = list()
for i in range(len(cur_list)):
sortedlist.append(''.join(map(str, sorted(cur_list[i]))))
sortedlist = set(sortedlist)
以下是我编写的解决方案:如果有人有更好的算法,我会接受这个答案:
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)
输出:
['IKW', 'IQW', 'KLW', 'LQW']
['IKW', 'IQW', 'KLW', 'LQW']