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



这是我第一次在这里问问题,所以请不要在我试图了解事情的摆动时过多地烤我。

我正在使用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 函数来完成此操作。我已经搜索了Stack Overflow的深度,没有找到任何特别有用的东西。

谢谢你的帮助。

更新:

我想添加更多信息,以消除因我的语言缺乏特异性而导致的任何混乱。目标是生成包含原始列表中的四个元素的子列表,子列表的元素相差值为 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]

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

我希望这能解决问题!

可以使用嵌套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 的规则。

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]

最新更新