excel列中数字更改的次数

时间:2012-08-30 14:50:26

标签: python excel list

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

我被告知要使用set.difference,但我不明白怎么做。所以我尝试了自己的方式,并在elif部分得到错误'list index out of range'。这是我的脚本(我还在研究基础知识,所以这看起来非常业余):

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 

2 个答案:

答案 0 :(得分:1)

for x in range(len(a)):应为

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

因为你在循环中得到一个索引为x+1的列表元素,因此你读的元素太多了。

答案 1 :(得分: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创建成对元组。这会创建一个列表,例如[(1, 1), (1, 1), ..., (1, 2)]。然后,我们只使用filter()获取具有两个不同值的元素(例如(1, 2))。

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