如何根据原始列表中与设置值不同的元素来切片列表(或创建子列表)

时间:2018-10-16 04:33:28

标签: python python-3.x list

这是我第一次在这里问问题,所以当我试图使事情发生变化时,请不要太烦我。

我正在使用Python 3处理某些代码。因此,在我的代码中生成了一个列表。为了具体起见,假设我正在使用以下列表:

a = [3344, 3354, 3364, 3364, 3374, 3374, 3384, 3384, 3394, 3394, 3404, 3404, 3414, 3414, 3424, 3434]

我想将此列表分为以下子列表:

sub1 = [3344, 3354, 3364, 3374]
sub2 = [3364, 3374, 3384, 3394]
sub3 = [3384, 3394, 3404, 3414]
sub4 = [3404, 3414, 3424, 3434]

因此,我想根据具有已知值(在本例中为10)的不同元素将原始列表分类为子列表。

我无法使用基于索引的切片,还无法实现任何类型的lambda函数来完成此操作。我搜索了堆栈溢出的深度,但没有发现任何特别有用的信息。

谢谢您的帮助。

更新:

我想补充一些信息,以消除由于我的语言缺乏专业性而引起的任何混乱。目标是从原始列表中生成包含四个元素的子列表,该子列表的元素相差10。

为了更好地解释我在这里要完成的工作,我将提供第二个列表和所需的输出子列表。

b = [3384, 3404, 3344, 3394, 3374, 3414, 3354, 3404, 3384, 3424, 3364, 3414, 3394, 3364, 3434, 3374]

所需的输出看起来像这样:

sublist1 = [3344, 3354, 3364, 3374]
sublist2 = [3364, 3374, 3384, 3394]
sublist3 = [3384, 3394, 3404, 3414]
sublist4 = [3404, 3414, 3424, 3434]

我需要能够生成此输出,因为这些子列表稍后将用作不同功能的输入值...必须捕获退化值。

我希望这可以解决所有问题!

2 个答案:

答案 0 :(得分:0)

您可以使用嵌套的for循环,将a中的项目追加到现有的子列表中,该子列表的长度小于4,并且最后一个项目比该项目小10,或者创建一个新的该项目的子列表:

l = []
for i in a:
    for s in l:
        if len(l) < 4 and s[-1] + 10 == i:
            s.append(i)
            break
    else:
        l.append([i])

鉴于您的示例输入,l将变为:

[
    [3344, 3354, 3364, 3374],
    [3364, 3374, 3384, 3394],
    [3384, 3394, 3404, 3414],
    [3404, 3414, 3424, 3434]
]

请注意,您的预期输出是错误的,因为您可以将输入a中的项目分类为两个子列表,而不会破坏所有相邻项目相差10的规则。

答案 1 :(得分:0)

sortedset和循环一起使用

b = [3384, 3404, 3344, 3394, 3374, 3414, 3354, 3404, 3384, 3424, 3364, 3414, 3394, 3364, 3434, 3374]

lst = sorted(set(b))
for i in range(4):
    print(lst[i*2:i*2+4])
[3344, 3354, 3364, 3374]
[3364, 3374, 3384, 3394]
[3384, 3394, 3404, 3414]
[3404, 3414, 3424, 3434]