我想清除列表中的元素。如果我的列表包含数字1和一个stirng“1”,我只想保留一个元素,要么是integer,要么是sting

2024-10-06 08:43:21 发布

您现在位置:Python中文网/ 问答频道 /正文

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]


Tags: and字符串inl1列表forifnot
2条回答

在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进行检查并在需要时进行追加。我希望这有帮助。你知道吗

列表理解有一种方法,你可以创建一个新的列表,但是这个例子只有在你知道你想删除什么的情况下才有效:

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语句删除这些元素。不确定,不管怎样,我还是同意科拉尔夫的方式。你知道吗

相关问题 更多 >