簡體   English   中英

Python相當於Haskell的[1 ..](用於索引列表)

[英]Python equivalent of Haskell's [1..] (to index a list)

我在python中有一個元素列表。 我不知道列表中的元素數量。 我想將索引添加到列表中。

在Haskell中,我可以執行以下操作

zip [1..] "abcdefghijklmnop"
[(1,'a'),(2,'b'),(3,'c'),(4,'d'),(5,'e'),(6,'f'),(7,'g'),(8,'h'),(9,'i'),(10,'j'),(11,'k'),(12,'l'),(13,'m'),(14,'n'),(15,'o'),(16,'p')]

現在想象一下該字符串的大小未知。 這在Haskell中仍然可以使用,並且整數列表會根據需要提供盡可能多的整數,直到字符串用盡。

如何在Python中做到等效?

我已經試過了:

s = "abcdefghijklmnop"
indexedlist = []
for i,c in enumerate(s):
    indexedlist.append((i,c))

>>> indexedlist
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'), (10, 'k'), (11, 'l'), (12, 'm'), (13, 'n'), (14, 'o'), (15, 'p')]

它可以工作,但是我想知道是否有更短/更干凈的方法,因為它是4行代碼並且感覺很豐富。

只做list(enumerate(s)) 這將遍歷enumerate對象並將其轉換為list

您可以通過列表理解來簡化它:

>>> [i for i in enumerate(s)]

您可以在zip使用range函數。

對於Python 2:

>>> s = "abcdefghijklmnop"
>>> zip(range(16),s)
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'), (10, 'k'), (11, 'l'), (12, 'm'), (13, 'n'), (14, 'o'), (15, 'p')]

對於Python 3:

>>> s = "abcdefghijklmnop"
>>> list(zip(range(16),s))
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'f'), (6, 'g'), (7, 'h'), (8, 'i'), (9, 'j'), (10, 'k'), (11, 'l'), (12, 'm'), (13, 'n'), (14, 'o'), (15, 'p')]

使用enumerate絕對是必經之路,但是這里有一些具功能性的toolz解決方案:

from toolz.itertoolz import iterate, zip
zip(iterate(lambda x: x + 1, 0), "abcdefghijklmnop")

暫無
暫無

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

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