我刚开始学习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
答案 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()
)。