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