按固定间隔切片列表,然后按merg

2024-04-29 20:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在每个x索引处“列化”列表?你知道吗

我在考虑这样做,首先创建两个新列表,合并它们,然后添加不能被x整除的余数。你知道吗

例如,间隔为2:

start = [
    [1, 'one'],
    [2, 'two'],
    [3, 'three'],
    [4, 'four'],
    [5, 'five'],
    [6, 'six'],
    [7, 'seven'],
    [8, 'eight'],
    [9, 'nine'],
]
expected = [
    [1, 'one', 3, 'three'],
    [2, 'two', 4, 'four'],
    # page break
    [5, 'five', 7, 'seven'],
    [6, 'six', 8, 'eight'],
    # page break
    [9, 'nine'],
]

只是想知道有没有快速的方法?你知道吗


Tags: 列表间隔pageonestartthreefourexpected
2条回答

你在找这样的东西吗?列化平方矩阵?你知道吗

start = [
    [1, 'one'],
    [2, 'two'],
    [3, 'three'],
    [4, 'four'],
    [5, 'five'],
    [6, 'six'],
    [7, 'seven'],
    [8, 'eight'],
    [9, 'nine'],
]
expected = [
    [1, 'one', 3, 'three'],
    [2, 'two', 4, 'four'],
    # page break
    [5, 'five', 7, 'seven'],
    [6, 'six', 8, 'eight'],
    # page break
    [9, 'nine'],
]
a = 2
r = a*a
ans = []
for i in range(0, len(start), r):
    l_tmp = start[i:i+r]
    if l_tmp[::a]:
        ans.append([item for sublist in l_tmp[::a] for item in sublist])
    if l_tmp[1::a]:
        ans.append([item for sublist in l_tmp[1::a] for item in sublist])
    # You can easily add page break here
print(ans)

我同意关于这是一个奇怪的方式'专栏'的评论。但是,这里有一个函数执行您所描述的操作:

def columnize(A, interval=2):
    ans = []
    for i in range(0,len(A), interval*2):
        for j in range(min(interval, len(A)-i)):
            ans.append(A[i+j] + (A[i+j+interval] if i+j+interval < len(A) else []))
    return ans

相关问题 更多 >