【问题标题】:remove different elements of a list in python在python中删除列表的不同元素
【发布时间】:2017-03-24 23:36:27
【问题描述】:

我有一个这样的列表:

["Dog owner writes for dying cat", **datetime.datetime(2014,4,3,16,21,57), ''**, "Get him a ball", **datetime.datetime(2015,11,20,19,18,23), ''**]

此列表中有许多元素,例如 datetime.datetime(2015,11,20,16,21,57)''。如何删除它们?

备注1: datetime.datetime(2015,4,3,16,21,57)后面的''是一对单引号。

备注2:显然,datetime后面的数字是时间,格式为年、月、日、时、分、秒。

【问题讨论】:

  • 你试过什么?在尝试从您研究过的列表中删除元素的解决方案时,您遇到了什么问题?
  • newlist = mylist[::2] 如果你总是有那种字符串模式,日期时间
  • @StevenSummers:datetime 后面的空字符串也应该被删除。
  • 哦,谢谢,没看到他们,然后newlist = mylist[::3],如果它总是那个模式。

标签: python list filter


【解决方案1】:

创建一个包含缺失项目的新列表比从列表中删除它们更有意义。

作为 for 循环

cleaned = []
for i in my_list:
    if type(i) is str and i != ""
        cleaned.append(i)

作为列表理解

cleaned = [ i for i in in my_list if type(i) is str and i != "" ]

【讨论】:

  • 在您的情况下,您可以执行and i,因为您正在明确测试str 类型:)
  • 是的。但是,我认为这更明确,因此更好:)
【解决方案2】:

您可以使用列表理解过滤掉datetime 对象和空字符串:

[x for x in lis if <b>'' !=</b> x and <b>type(x) is not</b> datetime.datetime]

其中lis 是原始列表。这将删除 datetime.datetime 对象和空字符串。因此,如果列表包含列表、整数等;那些没有被过滤掉。

这会生成:

>>> [x for x in lis if '' != x and type(x) is not datetime.datetime]
['Dog owner writes for dying cat', 'Get him a ball']

【讨论】:

  • if '' != x => if x
  • @Jean-FrançoisFabre:但不应删除空列表等。至少没有具体说明。
  • 这不一样@Jean-FrançoisFabre
  • 我知道那不一样。
猜你喜欢
  • 2019-07-21
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2017-08-18
  • 1970-01-01
相关资源
最近更新 更多