条件跳过列表中的2个成员

时间:2012-12-18 18:24:46

标签: python

  

可能重复:
  Modifying list while iterating

我有一个任务是在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”?

3 个答案:

答案 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]

你的代码应该是错误的,因为你引用了元素的索引,但是循环期间列表会改变大小,所以索引也会改变。

编辑:没想到套装,显然它们是最好的解决方案。