[英]Rewriting function as nested list comprehension
alist['a','b','Date','e','f']
def col_num_of(columnName,listObj):
for ind,cell in enumerate(listObj):
if cell==columnName:
return ind
print(col_num_of('Date',alist))
如何將以上功能寫成一線?
嘗試失敗:
def col_num_of(columnName,listObj):
return ind if cell==columnName for ind,cell in enumerate(listObj)
注意:請保留實用性和可讀性注釋。 謝謝。
如我的評論所述,您基本上是在重新實現index
。
您當前的函數返回搜索到的項的第一個匹配項的索引;如果找不到,則返回None
。
作為列表理解(僅出於學術目的),它可能類似於:
colNum = ([idx for idx, ele in enumerate(alist) if ele == 'Date'] + [None])[0]
>>> alist=['a','b','Date','e','f']
>>> alist.index('Date')
2
>>> [i for i, v in enumerate(alist) if v=='Date']
[2]
如果您要查找的值不在列表中,則.index()將給您ValueError。
>>> alist=['a','b','Date','e','f'] >>> alist.index('acc') Traceback (most recent call last): File "", line 1, in alist.index('acc') ValueError: 'acc' is not in list
另外,如果您要查找的字符串多次出現,則只會得到第一個。
>>> alist=['a','b','a'] >>> alist.index('a') 0
因此,請確保您將捕獲此錯誤,或者可以使用dawg的方法:
>>> [i for i, v in enumerate(alist) if v=='Date'] [2]
如果沒有匹配項,將返回空列表。
>>> [i for i, v in enumerate(alist) if v=='accc'] []
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.