我有一个任务是在python中创建一个代码,它将删除列表中多次出现的所有成员,并保留一份副本。 条件:它应该是案例中的
所以我写下了以下代码:
string = raw_input()
list1 = string.split(",")
low_case_list = list1[:] #for case-insesitive
for i in range(len(low_case_list)):
low_case_list[i] = low_case_list[i].lower()
for member in low_case_list:
if(low_case_list.count(member) > 1):
del list1[low_case_list.index(member)]
del low_case_list[low_case_list.index(member)]
输入后我得到这个列表:[a,b,c,d,A,B,C,D,a,b,c,d] 在我对它进行操作之后:[B,D,a,b,c,d]
我的问题是,为什么它会在删除成员时跳过“B”和“D”?
答案 0 :(得分:1)
你可以尝试这样的事情:
input = raw_input().split(',')
unique = set([s.lower() for s in input])
result = list(unique)
答案 1 :(得分:1)
为什么不将您的list
转换为set
,将所有元素转换为lower-case
,然后再转换回list
。您可以使用generator
将每个元素转换为lowercase
。
你可以这样做: -
>>> l = ['a', 'b', 'c', 'A', 'B', 'C', 'a', 'b', 'c']
>>> new_list = list(set(elem.lower() for elem in l))
>>> new_list
['a', 'c', 'b']
请注意,订单可能会更改,因为set
不会保留其order
元素。
答案 2 :(得分:1)
试试这个,应该很简单。
根据您的列表li
:
lowcase = [elem.lower() for elem in li]
output = []
for el in lowcase:
if el not in output: output.append(el)
return output # if necessary, otherwise a simple li = output
或者,以更快,更优雅的方式,您可以用以下内容替换整个for
循环:
[output.append(el) for el in lowcase if el not in output]
你的代码应该是错误的,因为你引用了元素的索引,但是循环期间列表会改变大小,所以索引也会改变。
编辑:没想到套装,显然它们是最好的解决方案。