2016-12-08 9 views
2

私は50個の数字のテキストファイルを読み込んで数値をソートし、それらの値に基づいて異なる変数に割り当てるループをPythonで記述しようとしています。変数Aには2より小さい値、変数Bには2から2.1の値、変数cには2.1から2.25の値、変数dには2.25から2.5の値、変数eには値が含まれています。 2.25〜2.5。数値のリストをPythonの値に基づいて分類します

私のコードは、これまでのようになります。

import os 
import numpy 
os.chdir('/Users/DevEnv') 

dispFile = open('output1.txt') 
displacement = dispFile.readlines() 
dispFile.close() 

displacement = [float(i.strip()) for i in displacement] 


for i in range (0,50): 
    displacementval = displacement[i] 
    if i<2 displacementval()=a(): 

しかし、私は無効な構文エラーを取得し、これを実行しようとします。私はPythonとプログラミングには新しく、どんな助けにも感謝しています!

+0

「a」変数はどこから来ていますか? – roymustang86

+0

aは2より小さい値を格納するために作成したい変数です – user7269405

+0

displacmentvalの値がすでにインスタンス化されているようです。 – Simon

答えて

4

あなたは変数abcdを初期化する必要があり、かつelistとして:

import os 
import numpy 
os.chdir('/Users/DevEnv') 

dispFile = open('output1.txt') 
displacement = dispFile.readlines() 
dispFile.close() 

displacement = [float(i.strip()) for i in displacement] 

a = [] 
b = [] 
c = [] 
d = [] 
e = [] 

for displacementval in displacement: 
    if displacementval < 2: 
     a.append(displacementval) 
    elif displacementval < 2.1: 
     b.append(displacementval) 
    # ... the rest is similar, so omitted 
print a 
print b 

私はあなたが最初のPythonの構文のアイデアを得るので、公式Python tutorialを読んでお勧めします。

+0

ありがとうございます! – user7269405

0
import os 
import numpy 
os.chdir('/Users/DevEnv') 

dispFile = open('output1.txt') 
displacement = dispFile.readlines() 
dispFile.close() 

displacement = [float(i.strip()) for i in displacement] 
a = [] 
b = [] 
c = [] 
d = [] 
e = [] 

for i in displacement: 
    if i <2: 
     a.append(i) 
    elif i < 2.1: 
     b.append(i) 
    elif i < 2.25: 
     c.append(i) 
    elif i< 2.5: 
     d.append(i) 
    else: 
     e.append(i) 

は、リストをインスタンス化することを忘れないでください、そしてラインif i<2 displacementval()=a():は何を意味するものではありません。

+0

うわー、本当に助けてくれてありがとう! – user7269405

0

ここにいくつかの問題がありますが、私はあなたを歩いていくために最善を尽くします。 まず、a、b、c、d、eの5つの変数が必要であり、それぞれに値のリストを保持する必要があると述べました。これを行うには、最初にリストとして宣言する必要があります。これは、Pythonでは単なる値の集まりです。これは、次のようになります。

ループのために、私たちはこのように、値を比較し、それに応じてそれらをソートする必要が私たちの中に
a = [] 
b = [] 
c = [] 
d = [] 
e = [] 

次へ:

for i in range(0, 50): 
    displacementval = displacement[i] 
    if displacementval < 2: 
     a.append(displacementval) 
    elif displacementval < 2.1: 
     b.append(displacementval) 
    elif displacementval < 2.25: 
     c.append(displacementval) 
    elif displacementval < 2.5: 
     d.append(displacementval) 
     e.append(displacementval) 

少し説明:我々が使用a_list.appendを(a_value)この値をリストの最後に追加します。また、if文は何かが真であるかどうかを確認し、次のelifに移動します。したがって、値が< 2でなければ、次の値に移動して2.1より小さいかどうか、2より大きく、2.1より小さくなければならないかどうかなどを調べます。

うまくいけば、これが役に立ちます。

+0

あなたのコードに 'else'句がありません。 – azalea

+0

@azalea 'else'の場合、どのような振る舞いになりますか? –

+0

現在のソリューションは、同じ値を「d」と「e」のリストに追加します。 – azalea

1

上記の初心者に優しいソリューションのハングアップを取得したら、bisectをご覧ください。

リンクされた例の少し意味の変更を行うことで問題を解決できます。

from bisect import bisect 

def grade(score, breakpoints=[2, 2.1, 2.25, 2.5], marks='abcde'): 
     i = bisect(breakpoints, score) 
     return marks[i] 

a,b,c,d,e = [], [], [] ,[], [] 
lists = [a,b,c,d,e] 
marks='abcde' 

r = map(lambda x: x/10.0, range(0, 501, 1)) 

for item in [(grade(score),score) for score in r ]: 
    l = marks.index(item[0]) 
    lists[l].append(item[1]) 

grade()、与えられた数のためにそれがブレークポイントに挿入されるならばどのような指標でそれは行くだろう、聞いてきますか?そしてそれはマーク[インデックス]を返します。たとえば、スコアを1に設定した場合、1は2より前のブレークポイントのインデックス0に属していると計算されるため、マーク[0] = aが返されます。

printステートメントは、(文字マーク、マークが割り当てられている値)を含むタプルのリストを提供します。

私はこれがより進歩していると言いました。基本的な概念を理解した後で理解するようにしてください。しかし、あなたの心を少し曲げてみる価値はあります。

+0

素晴らしい解決策!しかし、問題の元のデータを例として使用することをお勧めします。したがって、numpyは不要です(デフォルトではPythonに付属していないため)。 – azalea

+0

ありがとう、私は浮動小数点範囲を実証するための迅速な方法が必要でしたが、STLがデフォルトでそれをサポートしているかどうか知っていますか? – themistoklik

+1

このスレッドで解説されているように、複数の方法があります:http://stackoverflow.com/a/7267287/1292238 – azalea

関連する問題