在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()
)来计算。