我有一个像
这样的清单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)))
答案 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)
>>> 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)]