通过条件

时间:2018-03-30 21:46:06

标签: python python-3.x list

我有一个嵌套列表,每个嵌套列表中包含两个元素,第二个元素是条件列表。

lst = [[2, 1], [5, 1], [10, 1], [9, 1], [10, 2], [18, 2]]

如果子列表中的第一个索引小于列表中所有1的后续列表中的第一个索引(第二个子列表元素),则计数器值应该递增1。同样,对于列表中的所有2个。例如,计数器设置为1.对于列表中的所有1:2< 5,5< 10 - 计数器保持在1.然而,在下一个比较中10< 9为假,因此计数器增加1.程序应该打印2.现在对于列表中的所有2,10< 18,因此计数器变量只打印1.因此程序打印2 1作为其输出。

我对如何实现这一点感到有些困惑。所以我开始一步一步地思考它。有一个比较每个第一个索引的for循环是有意义的。所以我所做的是将每个第一个子列表元素附加到一个新列表。

count = 1
newlst = []
for item in lst:
    newlst.append(item[0])

列表如下所示:

[2, 5, 10, 9, 10, 18]

但是,即使我比较所有这些值,即检查索引是否<索引+ 1.它不会输出2 1.很可能,它只输出1.如何在第二个子列表元素的基础上对所有1和那么进行比较2' S?还有另一种方法可以让程序输出2 1吗?

注意:列表的输入不一定是这个列表,它可以是每个子列表中包含2个元素的任何嵌套列表,即[[4,1],[8,1],[1,2], [6,2],[15,3],[9,3]] - 输出为1 1 2。

2 个答案:

答案 0 :(得分:0)

此程序从您的第一个数据集中获取describe('Wrapper', function() { var _startup = function(done) { login(); window.setTimeout(done, 150); }; var _shutdown = function() { logout(); }; describe('Inner 1', function() { beforeAll(_startup); afterAll(_shutdown); }); describe('Inner 2', function() { beforeAll(_startup); afterAll(_shutdown); }); describe('Inner 3', function() { beforeAll(_startup); afterAll(_shutdown); }); });

2 1

答案 1 :(得分:0)

在澄清问题之后,我必须提及@Robᵩ,他几乎已经钉了它。

from itertools import groupby
lst = lst=[[4, 1], [8, 1], [1, 2], [6, 2], [15, 3], [9, 3]]
    for __,grp in groupby(lst, key=lambda x:x[1]):
    grp = list(grp)
    print (sum((i<j) for i,j in zip(grp[1:],grp))+1)

只有必须改变的是zip()中两个列表的顺序,并且还添加+1,因为计数器应该从一个开始。

现在这应该打印出你想要的输出。