gpt4 book ai didi

python - 循环拆分不同子列表中的列表

转载 作者:行者123 更新时间:2023-11-28 22:55:21 25 4
gpt4 key购买 nike

我想拆分一个数字列表,将序列的第一个数字与下一个数字进行比较,以确定它是否更大,在这种情况下,我们创建该子列表,直到找到一个更小的数字。和彼此

Inputdata = [45,42,78,120,47,2,50,32,34]

比较 45 和 42 不是更大,所以只用 45 创建列表,并从 42 开始与下一个比较,直到找到小于 42 的:

Output = [45] [42,78,120,47] [2,50,32,34]

这是我的代码:

data = [45,42,78,120,47,2,50,32,34]

m = (len(data))
i=0
list1=[]
emptylist = True
while i <= m:

for j in range(i+1,len(data)-1):


if data[i] < data[j]:
list1.append(data[j])
emptylist = False

else:

if emptylist:

list1.insert(0,data[i])
print list1
i += j
list1 = []
emptylist = True
break

else:
list1.insert(0,data[i])
print list1
print j
i += j
print i
list1 = []
emptylist = True
i += j
break

我的输出是:

[45]
[42, 78, 120, 47]

我找不到问题...有什么建议吗?谢谢

PD1。这个想法是创建子列表,其中第一个元素是较小的元素。

最佳答案

L = [45, 42, 78, 120, 47, 2, 50, 32, 34]

cond = L[0]
res = [[cond]]
for item in L[1:]:
if item > cond:
res[-1].append(item)
else:
cond = item
res.append([cond])

现在res是:

[[45], [42, 78, 120, 47], [2, 50, 32, 34]]

详情:

0 索引给你第一个元素:

>>> cond = L[0]
>> cond
45

我们创建新列表 res 来保存我们的结果,并将 45,即第一个元素放入列表中,列表又成为 的第一个元素>资源:

>>> res = [[cond]]
>>> res
[[45]]

现在,我们从第二个元素开始遍历列表。 L[1:] 给出了这个子列表:

>>> L[1:]
[42, 78, 120, 47, 2, 50, 32, 34]

请注意,res[-1] 始终为我们提供列表的当前最后一个元素。这本身必须是列表,如果下一个数字 (item) 大于我们的 cond,我们将追加它。否则,我们附加一个只有一个元素的新子列表 res.append([cond])。在下一轮中,我们也会这样做。因此,构成 res 中最后一个元素的列表将随着 item > cond 的增长而增长。如果不是,我们将附加一个带有 cond 的新列表。冲洗并重复直到原始列表的末尾。

变化

L[1:] 复制了 L。这不是最有效的方法。如果我们将 L 变成一个迭代器,我们就可以避免这种情况:

L = iter([45,42,78,120,47,2,50,32,34])
cond = next(L)
res = [[cond]]
for item in L:
if item > cond:
res[-1].append(item)
else:
cond = item
res.append([cond])

每个 next(L) 都会给我们迭代器中的下一个项目。 for 循环将遍历其余部分。所以在我们的例子中,它从第二个元素开始,因为我们调用了一次 next()

关于python - 循环拆分不同子列表中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17010904/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com