簡體   English   中英

Pythonic方式無法使用列表

[英]Pythonic way not working with list

我有一個看似簡單的問題,但是我認為應該解決的代碼表現不佳,但是我發現功能上不那么優雅的代碼在功能上與預期一樣。 你能幫我理解嗎?

任務:創建一個列表,刪除一個特定的值。 特定的用例是我要刪除pd.df列的特定列表,但這不是我要關注的部分。 我似乎無法通過不錯的pythonic單行操作來做到這一點。

我認為應該起作用:

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)的第一個。

這些絕對不是功能上等效的。

  1. 第一部分代碼將最后一個調用方法的結果放入結果中,因此無論remove怎樣返回。 remove始終返回None,因為它什么也不返回。
  2. 第二段代碼將列表放入結果中,然后從列表(已存儲在結果中)中刪除該項目。 您應按原樣丟棄remove的返回。 要做的等效和錯誤的事情是:

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

這兩段代碼並不是真正等效的。 在第二個中,變量result保存您的列表。 然后,您在該列表上調用remove ,該元素將被刪除。 到現在為止還挺好。

在第一段代碼中,您嘗試將remove()的返回值分配給result,因此它與以下內容相同:

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

並且由於remove沒有返回值,因此結果將是NoneType

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM