【问题标题】:Pythonic way to modify listPythonic 修改列表的方法
【发布时间】:2015-11-27 03:12:36
【问题描述】:

有没有更 Pythonic 的方式来告诉列表它的哪些部分必须保留在其中,哪些部分必须删除?

li = [1,2,3,4,5,6,7]

通缉名单:

[1,2,3,6,7]

我可以这样做:

wl = li[:-4]+li[-2:]

我正在寻找类似li[:-4,-2:] 的东西(在一个语句/命令中)

我当然可以remove,但它可以在很多情况下使用,例如:

通缉名单:

[3,4,5,6,7]

我可以del li[0:2]

但更常见的做法是:

li[2:]

【问题讨论】:

  • 过滤列表背后的逻辑是什么?我的意思是一组随机整数的输出应该是什么?
  • wl = li[:-4]+li[-2:] 有什么问题?为什么要在此处损害可读性?这是最好的方法(afaik)
  • li[:-4]+li[-2:] 不会产生[1,2,3,6]
  • Pythonic 的方式是使用你已经找到的东西。没有更紧凑的语法。
  • li[3:5] = []del li[3:5] 在我看来还可以

标签: python list syntax semantics


【解决方案1】:

除了常规的 python 列表,NumPy arrays can be indexed by other sequence-like objects(除了元组)例如通过常规 python 列表或另一个 NumPy 数组。

import numpy as np

li = np.arange(1, 8)
# array([1, 2, 3, 4, 5, 6, 7])

wl = li[[0,1,2,5,6]]
# array([1, 2, 3, 6, 7])

当然,这给你留下了创建索引序列的问题(在这个例子中是常规的 python 列表[0,1,2,5,6]),这让你回到了第一个问题。 (除非您需要在相同的索引处访问多个 NumPy 数组,因此您只需创建一次此索引列表,然后重复使用它。)

只有在您有其他理由使用 NumPy 或专门使用 NumPy 数组时,您才应该考虑这一点。

【讨论】:

    【解决方案2】:

    如果希望输出列表遵循一定的逻辑,可以使用过滤功能。

    filter(lambda x: x > 2, li)
    

    或许

    filter(lambda x: x < 4 or x > 5, li)
    

    【讨论】:

    • 这个完全不一样,OP根据值过滤在哪里?
    • 鉴于 OP 没有提到他为什么想要特定列表,我假设他想删除某些遵循特定逻辑的值。我可以看出你是对的,而且这个假设是没有根据的。
    猜你喜欢
    • 2017-08-17
    • 1970-01-01
    • 2019-06-30
    • 2023-03-21
    • 2013-03-24
    • 2016-09-26
    相关资源
    最近更新 更多