簡體   English   中英

使用推導從python列表中提取子集

[英]Extract subset from python list using comprehensions

我有傻瓜。 列表(此處顯示玩具示例):

rasters = ['A','A.txt','B','B.txt']

我要刪除.txt文件,因此請執行以下操作:

ras = [x for x in enumerate(rasters) if len(os.path.splitext(x)[1]) > 0]

但是,我收到此錯誤: *** AttributeError: 'tuple' object has no attribute 'rfind'

我該如何解決?

只是從列表理解中刪除enumeratenot要從if語句中刪除

ras = [x for x in rasters if not len(os.path.splitext(x)[1]) > 0]

enumerate將為您提供(索引,值)柵格列表,其中僅需要值。

也不需要檢查os.path.splitext(x)[1]長度,您只需執行

ras = [x for x in rasters if not os.path.splitext(x)[1]]

與if的boolos.path.splitext(x)[1]一起使用時,對於''字符串將為false。

enumerate(rasters)返回(index, element)對的列表。 您正在將該列表的每個元素傳遞給os.path.splitext ,該字符串需要一個字符串。

您需要確保僅將元素(而不是包含該元素及其索引的元組)提供給splitext 實際上,這意味着將第二個元素投影到元組之外: x[1]

您的病情也不正確。 您選擇的是帶有擴展名的元素,而不是沒有擴展名的元素。 > 0更改為== 0

ras = [x for x in enumerate(rasters) if len(os.path.splitext(x[1])[1]) == 0]

這是假設您打算將項目的索引保留在原始列表中。 如果您不希望這樣做,則不應該使用enumerate

ras = [x for x in rasters if len(os.path.splitext(x)[1]) == 0]

暫無
暫無

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

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