繁体   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