2

我刚开始学习 Python,需要帮助分析 Excel 电子表格中的数据。excel表在一列中有即111122221112211,我试图弄清楚这里发生了多少从1到2或2到1的变化。在这种情况下,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 
4

2 回答 2

1

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

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

因为您在循环内获得了一个带有索引的列表元素,x+1因此您阅读了一个元素太多。

于 2012-08-30T14:57:31.637 回答
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)]. 然后,我们只使用具有两个不同值(例如(1, 2))的元素filter()

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

于 2012-08-30T14:57:41.130 回答