簡體   English   中英

重寫功能為嵌套列表理解

[英]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.

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