-1

名前のリストを持つプログラムを作成する必要があり、名前の各セット (2 行) の下に、コンマ (1,2) で囲まれた 2 つの数字のセットがあります。

だから、このようなもの

Jane
Doe
14.5,12.3

これは、ループが 0,0 になるまで同じ 3 行で繰り返され、ループが終了します。

同時入力のあるループを正確に記述する方法と、文字列と数値を分離する方法。

4

3 に答える 3

1

項目が 3 行にグループ化されている場合は、次のように使用します。

data = []
with open('inputfile.txt') as inf:
    numbers = None
    while numbers != [0, 0]:
        name1 = next(inf).strip()
        name2 = next(inf).strip()
        numbers = [float(n) for n in next(inf).split(',')]
        data.append((name1, name2, numbers))

これは入力ファイルを iterable として使用し、numbersと等しくなるまで一度に 3 行ずつ取得し[0, 0]ます。

于 2013-03-17T18:03:02.497 に答える
0

を使用takewhileしてカスタム関数を使用しast.literal_evalgrouperからのレシピを使用しitertoolsて、少し後に転置します。

from itertools import takewhile, izip_longest
from ast import literal_eval

def until_0(text):
    try:
        return literal_eval(text) != (0, 0)
    except ValueError:
        return True

with open('/home/jon/data.txt') as fin:
    lines = (line.rstrip() for line in fin)
    data = list(takewhile(until_0, lines))

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

print [list(el) for el in grouper(3, data, fillvalue='0,0')]
# [['Jane', 'Doe', '14.5,12.3'], ['Jane', 'Doe', '6.7,2.3'], ['John', 'Doe', '0,0']]
于 2013-03-17T19:16:53.713 に答える
0

意味のある最初のステップの 1 つは、必要な名前と番号だけにリストを切り詰めることです。'0,0' の最初の行の前にあるリストの部分にのみ関心があるため、これは簡単に行うことができます。その行のインデックスを取得し、そこでリストをスライスして、そのセクションを取得できます。

your_data = ['Jane', 'Doe', '14.5,12.3', etc etc]
z_index = your_data.index('0,0')
new_data = your_data[:z_index + 1] # +1 to include '0,0' as the last element

そこから、実際にデータで何をしたいかによって異なります。しかし、名前と番号を含む辞書のリストが必要だとしましょう:

results = []
while new_data:
    results.append({'first':new_data[0],
                    'last':new_data[1],
                    'numbers':new_data[2]})
    new_data = new_data[3:]

数値のペアは、txt ファイルから読み取られたため、ここではまだ文字列です。必要に応じて、数字を辞書に割り当てるときに、数字を分割して浮動小数点数に変換できます。

また、ここでいくつかの仮定を立てています。リストには常に「0,0」という行があり、最初/最後/番号の行が欠落する可能性はないということです。常にそうであるとは限らない場合は、例外を処理するためのロジックが少し必要になります。

于 2013-03-17T18:45:17.867 に答える