我想清理列表中的元素。如果我的列表包含数字1和一个搅拌" 1"我想只保留一个元素整数或sting

时间:2016-10-28 06:32:06

标签: python python-2.7 python-3.x

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]

2 个答案:

答案 0 :(得分: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语句中,我假设循环变量i是仅包含数字的intstr。如果是这样的话,这部分工作正常。

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

答案 1 :(得分: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语句删除这些元素。不确定,无论如何我都会选择珊瑚虫的方式。