2016-09-27 23 views
0

我写了一个函数,它填充了两个元素的列表的列表,其中第一个元素是来自不同列表的元素,第二个元素是一个递增的值。是否有与Python列表解析中使用的C++前/后缀运算符等价的方法?

def list_of_pairs(seq, start): 
    """ Returns a list of pairs """ 
    >>> list_of_pairs([3, 2, 1], 1) 
    [ [3, 1], [2, 2], [1, 3] ] 
    return [[i, start++] for i in seq] 

是否有相当于C++后缀的运算符可以使用?谢谢!

奖金问题:使用列表构造函数比使用方括号构造列表更麻烦吗?

编辑:这是我现在的(那么漂亮)的解决方法 -

def list_of_pairs(seq, start): 
    """ Returns a list of pairs """ 
    >>> list_of_pairs([3, 2, 1], 1) 
    [ [3, 1], [2, 2], [1, 3] ] 
    return [[seq[i], start+i] for i in range(len(seq))] 

回答

2

您可以使用enumerate()来实现此目的。枚举在迭代值列表时返回索引和值。根据您的要求,您需要列出list作为[val, index + count]。下面是示例代码来实现这一目标:

>>> seq = [2, 6, 9] 
>>> count = 2 
>>> [[val, count+i] for i, val in enumerate(seq)] 
[[2, 2], [6, 3], [9, 4]] 
2

可以实现与itertools.count一样,count调用对象的next为序列的每个元素:

from itertools import count 

c = count(start) 
lst = [[x, next(c)] for x in seq] 

使用方括号构造列表

这是一个列表理解。这是非常标准的,当然Pythonic使用列表解析来创建列表。

1

++--已经特意从Python中排除,因为在表达式中使用它们往往会导致代码的混乱及关闭的情况的一个错误。

您应该使用enumerate代替:

def list_of_pairs(seq, start): 
    return [[elem, i] for i, elem in enumerate(seq, start)] 
相关问题