在excel列中数字发生更改的次数

我刚开始学习Python,需要帮助分析Excel电子表格中的数据。 Excel工作表有111122221112211在一列,我想弄清楚从1到2或2到1在这里发生了多less变化。 在这种情况下,4倍。

我被告知使用set.difference,但我不明白如何。 所以我尝试了我自己的方式,并在ELIF部分得到错误“列表索引超出范围”。 这是我的脚本(我仍然在基础工作,所以这可能看起来非常业余):

a = xlws.Columns(5).value a = [list(x)[0] for x in a[1:400]] beam = 0 for x in range(len(a)): if a[x] ==1 and a[x+1]==2: beam += 1 elif a[x]==2 and a[x+1]==1: beam += 1 else: beam = beam 

for x in range(len(a)):应该是

 for x in range(len(a)-1): 

因为你在循环内部得到一个索引为x+1的列表元素,所以你正在读取一个元素太多。

计算它的另一种方法是使用izip

 >>> from itertools import izip >>> s = [1,1,1,1,2,2,2,2,1,1,1,2,2,2,1,1] >>> answer = len(filter(lambda x: x[0] != x[1], izip(s, s[1:]))) >>> answer 4 

上面的方法是:使用s和除第一个元素之外的所有元素( s[1:] ),并使用izip创build成对的元组。 这将创build一个列表,如[(1, 1), (1, 1), ..., (1, 2)] 。 然后,我们只使用filter()来获取具有两个不同值的元素(如(1, 2) filter()

具有不同值的元素的数量是您的问题的答案,我们通过计算列表的长度(用len() )来计算。