这是我第一次在这里问问题,所以当我试图使事情发生变化时,请不要太烦我。
我正在使用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]
我需要能够生成此输出,因为这些子列表稍后将用作不同功能的输入值...必须捕获退化值。
我希望这可以解决所有问题!
答案 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)
将sorted
与set
和循环一起使用
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]