簡體   English   中英

枚舉功能

[英]Enumerate function

誰可以給我解釋一下這個。

所以,我有一個列表s用數字從-1到1,我想提取列表中的某些電話號碼的位置。

例:

s= [-1, 0.5, 0.2, -0.9]

z = enumerate(s)
y1 = []
for i,j in z:
    if j<=-0.8 and j>=-1:
        k = i
        y1.append(k)

y2 = []
for i,j in z:
    if j<=0.8 and j>=-0.8:
        k = i
        y2.append(k)

我得到y1 = [0, 3]y2 = []

但是如果我定義第二個enumerate

z1 = enumerate(s)
y1 = []
for i,j in z1:
    if j<=-0.8 and j>=-1:
        k = i
        y1.append(k)

z2 = enumerate(s)
y2 = []
for i,j in z2:
    if j<=0.8 and j>=-0.8:
        k = i
        y2.append(k)

我得到結果y1 = [0, 3]y2 = [1, 2]

為什么我需要第二次enumerate

enumerate返回序列的迭代器。 遍歷后,無法再次使用:

In [1]: l = [1, 2, 3, 4, 5]

In [2]: e = enumerate(l)

In [3]: e
Out[3]: <enumerate at 0x7fad7aea25e8>

In [4]: list(e)
Out[4]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]

In [5]: list(e)
Out[5]: []

你可以用一個列表包裝它:

In [6]: e = list(enumerate(l))

In [7]: e
Out[7]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]

In [8]: list(e)
Out[8]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]

In [9]: list(e)
Out[9]: [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]

您還可以使用列表推導來簡化您的解決方案:

y1 = [i for i, x in enumerate(s) if -1 <= x <= -0.8]
y2 = [i for i, x in enumerate(s) if -0.8 <= x <= 0.8]

從python docs ,枚舉的實現如下:

def enumerate(collection):
    'Generates an indexed series:  (0,coll[0]), (1,coll[1]) ...'     
    i = 0
    it = iter(collection)
    while 1:
        yield (i, it.next())
        i += 1

因為它使用'yield',所以它是一個生成器,當你在行中迭代它時存儲狀態

for i,j in z

要僅使用一個枚舉,請將生成器的值轉換為列表並重用該列表:

s= [-1, 0.5, 0.2, -0.9]

z = list(enumerate(s))

y1 = []

for i,j in z:
    if j<=-0.8 and j>=-1:
        k = i
        y1.append(k)

y2 = []
for i,j in z:
    if j<=0.8 and j>=-0.8:
        k = i
        y2.append(k)

print(y1)
print(y2)

輸出:

[0, 3]
[1, 2]

enumerate是一個惰性生成器,一旦被調用並遍歷它就完成了。 所以,我認為最好直接在for循環中包含它的調用:

s= [-1, 0.5, 0.2, -0.9]

y1 = []
for i,j in enumerate(s):
    if -1 <= j <= -0.8: 
        y1.append(i)

y2 = []
for i,j in enumerate(s):
    if -0.8 <= j <= 0.8:
        y2.append(i)

附注:

if j<=-0.8 and j>=-1:可以替換為if -1 <= j <= -0.8:

暫無
暫無

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

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