列表到元组组

时间:2017-02-16 06:48:16

标签: python list tuples

我有一个像

这样的清单
A = [1,10,50,100,500]

我需要按正确的顺序将2个数字分组。输出就是这样,

B = [(1,9),(10,49),(50,99),(100,499)]

我尝试过yield

def group(lst, n):
    for i in range(0, len(lst), n):
        val = lst[i:i+n]
        if len(val) == n:
            yield tuple(val)

print(list(group([1,10,50,100,500], 2)))

2 个答案:

答案 0 :(得分:1)

你可以简单地DECLARE @bcp varchar(2000); SET @bcp = 'bcp "SELECT 1" queryout "\\MyServerA\Reports\MyFile.txt" -c -T -S MyServerB'; EXEC master..xp_cmdshell @bcp; 自己的序列(没有第一项):

zip

或者在没有中间函数的情况下将其用作列表理解:

A = [1,10,50,100,500]

def group(lst):
    for i, j in zip(A, A[1:]):  # pairwise items
        yield (i, j-1)          # decrement second item by 1

>>> list(group(A))
[(1, 9), (10, 49), (50, 99), (100, 499)]

答案 1 :(得分:0)

您可以使用列表理解与islicezip在列表上成对迭代:

>>> from itertools import islice
>>> A = [1,10,50,100,500]
>>> [(x, y - 1) for x, y in zip(A, islice(A, 1, None))]
[(1, 9), (10, 49), (50, 99), (100, 499)]

在上面islice返回一个从A上的第二个元素开始的迭代器。使用islice代替普通切片,因此不需要复制原始列表:

>>> s = list(islice(A, 1, None))
>>> s
[10, 50, 100, 500]

然后zip用于从原始列表和迭代器创建可迭代的项目对:

>>> pairs = list(zip(A, s))
>>> pairs
[(1, 10), (10, 50), (50, 100), (100, 500)]

最后列表理解迭代对以创建结果:

>>> [(x, y - 1) for x, y in pairs]
[(1, 9), (10, 49), (50, 99), (100, 499)]