[英]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'
我該如何解決?
只是從列表理解中刪除enumerate
, not
要從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的bool
值os.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.