2016-10-28 28 views
-4
l = [1,2,3,4,5,'1','2','3','4','nag','nag','venkat',5,6,7] 
l1 = [] 
for i in l: 
    if (str(i) not in l1) and (i not in l1): 
     l1.append(i) 
print l1 

我想清理我的列表。我的列表包含数字和字符串。在上面的列表中,我有1和“1”。我想删除1或“1”。我想输出为[1, 2, 3, 4, 5, "nag", "venkat", 6, 7]我想清理列表中的元素。如果我的列表包含数字1 ansSixng“1”我想保留只有一个元素或者整数或刺

+1

你有什么问题? – Humbalan

+1

寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建[MCVE]。 –

回答

0

在IDLE中证实,它提供了您正在寻找的输出。另外,我更新了一些变量的名称,使其更容易理解。

my_list = [1,2,3,4,5,'1','2','3','4','nag','nag','venkat',5,6,7] 
output_list = [] 
for i in my_list: 
    try: 
     if (str(i) not in output_list) and (int(i) not in output_list): 
      output_list.append(i) 
    except ValueError: 
     if i not in output_list: 
      output_list.append(i) 
print output_list 

在Python它的使用变量假设他们是某种类型的,只是赶上,而不是通过检查每一笔的类型(intstr等)的过程中去的错误,常见的做法。这里,在try声明中,我假设循环变量iint或仅包含数字的str。如果是这样,这部分工作正常。

但是,我们知道该列表包含一些字母串,因此try块将抛出ValueErrorexcept模块捕获并知道这个错误是由于试图将一串字母作为int(当我们使用int(i)时)导致的,现在我们可以安全地假设循环变量i引用了一串字母,它然后我们检查output_list并在需要时追加。我希望有所帮助。

+0

嗨,非常感谢。我想要的代码完全是你给的。 –

+0

你能告诉我我错了吗?为什么我的代码没有得到我需要的东西? –

+0

是的。你的代码没有检查包含数字的字符串,例如“1”或“4”。这意味着它不断包含那些你不想要的字符串。我所做的更改确保它检查这些字符串并按照您的要求处理它们。如果您发现我的答案有帮助,请考虑将其标记为已接受的答案。 – coralvanda

0

有与列表理解的方式,创建一个新的列表,但这个例子只是工作,如果你知道你想要删除的内容:

l1 = [i for i in l if i != "1" if i != "2" if i != "3" if i != "4"] 

#output 
[1, 2, 3, 4, 5, 'nag', 'nag', 'venkat', 5, 6, 7] 

,或者例如仅去除串“1”,它会是

l1 = [i for i in l if i != "1"] 

也许它可以在一个函数和循环中实现,以这种方式用单个if语句去除这些元素。不知道,无论如何,我会用coralv的方式去。

相关问题