python - 如何根据原始列表中与设定值不同的元素对列表进行切片(或创建子列表)
问题描述
这是我第一次在这里提问,所以请不要烤我太多,因为我试图让事情发生变化。
我正在使用 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 的规则。
推荐阅读
- ethereum - 错误:找不到模块“chai.as.promised”
- python - Seaborn 箱线图
- java - JacksonAdapter 无法在 azure-core-1.20 和 Java Web 应用程序中正确解析
- jenkins - 无法访问本地 minikube 上的入口
- windows - 使用PowerShell脚本卸载谷歌浏览器
- python-3.x - 数据框操作
- javascript - 有没有办法调整这些值?
- linux - install4j 智能卡 EV 代码签名问题
- html - 使用背景图像的六色代码作为笔划而不是 RGBA
- javascript - npm - 由于未满足的依赖关系,无法升级软件包