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