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]
在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中,通常的做法是使用假设它们是特定类型的变量并捕获错误,而不是在每个变量上检查类型(int
, str
等)。这里,在try
语句中,我假设循环变量i
是仅包含数字的int
或str
。在这种情况下,这个部分可以正常工作。
然而,我们知道列表包含一些字母字符串,因此try
块将抛出ValueError
。except
块捕获了这个错误,并且知道这个错误将由于尝试将一串字母转换为int
(当我们使用int(i)
时)而导致,现在我们可以安全地假设循环变量i
引用了一串字母,然后我们根据output_list
检查并在需要时追加。
列表推导有一种方法,你创建一个新的列表,但这个例子只有在你知道你想要删除什么时才有效:
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语句删除此类元素。我不确定,不管怎样,我还是用珊瑚的方式。