Pythonic方式不使用列表

Pythonic方式不使用列表,python,list,Python,List,我有一个看似简单的问题,但我认为应该解决这个问题的代码并没有达到预期的效果——但我发现一个不太优雅的代码在功能上与预期相当。你能帮我理解吗 任务:创建列表,删除特定值。 具体的用例是,我正在删除pd.df的特定列列表,但这不是我想要关注的部分。这是因为我似乎无法在一个好的,肾盂单线手术 我认为应该起作用的是: result = list(df.columns).remove(x) 这将导致对象类型为“NoneType” 但是,以下方法可以很好地工作: result = list(df.colu

我有一个看似简单的问题,但我认为应该解决这个问题的代码并没有达到预期的效果——但我发现一个不太优雅的代码在功能上与预期相当。你能帮我理解吗

任务:创建列表,删除特定值。 具体的用例是,我正在删除pd.df的特定列列表,但这不是我想要关注的部分。这是因为我似乎无法在一个好的,肾盂单线手术

我认为应该起作用的是:

result = list(df.columns).remove(x)
这将导致对象类型为“NoneType”

但是,以下方法可以很好地工作:

result = list(df.columns)
result.remove(X)

这些方法在功能上与我的方法相同——但顶层方法更清晰,更受欢迎,但它不起作用。为什么?

原因是
remove
会更改列表,并且不会返回新列表,因此您无法链接它

下面的方法怎么样

result = [item for item in df.columns if item != x]

请注意,此代码与您提供的代码并不完全等效,因为它将删除所有出现的
x
,而不仅仅是第一个与
remove(x)

相同的代码。这些代码在功能上绝对不等效

  • 第一段代码将最后调用的方法的结果放入结果中,因此无论
    remove
    返回什么<代码>删除始终不返回任何内容,因为它不返回任何内容
  • 第二段代码将列表放入结果中,然后从列表(已存储在结果中)中删除该项。您正在放弃返回的
    remove
    ,这是您应该放弃的要做的同样错误的事情是:
  • :


    这两段代码并不完全相同。在第二个变量中,变量
    result
    保存您的列表。然后在该列表上调用
    remove
    ,元素被删除。到目前为止还不错

    在第一段代码中,您尝试将
    remove()
    的返回值分配给result,因此这与以下相同:

    result = list(df.columns)
    result = result.remove(X)
    

    由于
    remove
    没有返回值,因此结果将是
    NoneType

    oh--没有找到该信息。Thanks@dozyaustin下次检查
    help(list.remove)
    Note,这实际上并不等同于
    result=list(df.columns);结果.remove(X)
    是的,使用
    remove(X)
    只删除了一次
    X
    。@ErikCederstrand已使用
    list(df.columns)
    创建了一个新列表。
    result = list(df.columns)
    result = result.remove(X)