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