python:将此行与nex进行比较

2024-09-28 17:17:41 发布

您现在位置:Python中文网/ 问答频道 /正文

c1是这样的列表列表:

c1=[[1,2,3],[1,2,6],[7,8,6]]

for row in c1:

我想知道row[0]是否有变化

例如:

[1, 2, 3][1, 2, 6]中,row[0]没有变化

然而在[1, 2, 6][ 7, 8, 6]row[0]有变化

我该怎么找零钱? 另外,我想知道更改发生在哪一行


Tags: in列表forrowc1零钱
3条回答

使用变量跟踪上一项。

prev = None
for row in c1:
  if prev is not None and prev != row[0]:
     # there is a change
  prev = row[0]

…请确保使用不存在的值作为起始值(如果列表可能包含任何内容,请为第一项使用额外的标志)。如果要将第一行视为更改,请将if更改为:

if prev is None or prev != row[0]:

如果你有矩阵数据,你基本上需要第一个“列”的差异。 您可能希望报告更改和更改的位置,并可能希望将其稀疏存储:

c1=[[1,2,3],[1,2,6],[7,8,6]]
ans=[]    # a list of [indices,differences]
col=0
for i in range(len(c1)-1):
    diff = c1[i+1][col]-c1[i][col]
    if diff!=0:
        ans.append([i,diff])
>>> from operator import itemgetter
>>> from itertools import groupby
>>> c1=[[1,2,3],[1,2,6],[7,8,6]]
>>> list(groupby(c1,itemgetter(0)))
[(1, <itertools._grouper object at 0xa6f8d0>), (7, <itertools._grouper object at 0xa6f890>)]

这只是说,将c1的元素按每个元素的第一项分组

还可以将结果展开为嵌套列表,以查看如何对项进行分组

>>> [(x,list(y)) for x,y in (groupby(c1,itemgetter(0)))]
[(1, [[1, 2, 3], [1, 2, 6]]), (7, [[7, 8, 6]])]

要获取更改行,可以查看结果的第一个元素的长度

>>> len(list(next(groupby(c1,itemgetter(0)))[1]))
2

相关问题 更多 >