2

Pythonの学習を始めたばかりで、Excelスプレッドシートのデータを分析するためのサポートが必要です。エクセルシートの1列に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+11つの要素を読みすぎているためです。

于 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)]ます。次に、を使用して2つの異なる値(など(1, 2))を持つ要素のみを取得しfilter()ます。

異なる値を持つ要素の数があなたの質問への答えであり、リストの長さを計算することによってそれを計算します(を使用してlen())。

于 2012-08-30T14:57:41.130 に答える