Python相当于Haskell的[1 ..](索引列表)

时间:2015-07-29 20:29:49

标签: python list loops haskell

我在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行代码并且感觉很多。

4 个答案:

答案 0 :(得分:22)

list(enumerate(s))。这将迭代enumerate对象并将其转换为list

答案 1 :(得分:5)

您可以使用列表理解来简化它:

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

答案 2 :(得分:1)

您可以将range功能与zip一起使用。

对于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')]

答案 3 :(得分:1)

使用Outer2.NestedInterface.x绝对是可行的方法,但这里有toolz更实用的解决方案:

enumerate