【问题标题】:I want to clean the element in a list. If my list contains number 1 ans a stirng "1" i want to keep only one element either integer or sting我想清理列表中的元素。如果我的列表包含数字 1 和搅拌“1”,我只想保留一个元素,整数或字符串
【发布时间】:2016-10-28 06:32:06
【问题描述】:
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]

【问题讨论】:

  • 你有什么问题?
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建minimal reproducible example

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


【解决方案1】:

在 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''4'。这意味着它不断地包含那些你不想要的字符串。我所做的更改确保它检查此类字符串并以您想要的方式处理它们。如果您发现我的回答有帮助,请考虑将其标记为已接受的答案。
【解决方案2】:

列表推导有一种方法,您可以创建一个新列表,但此示例仅在您知道要删除的内容时才有效:

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的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多