簡體   English   中英

在python中將輸入拆分為行

[英]Splitting input into lines in python

我正在嘗試解決此問題http://www.spoj.pl/problems/PEBBMOV/ 我認為我有正確的算法,這不是這個問題的重點。 這個問題有一個奇怪的輸入文件。 一個測試用例的輸入應采用n a1 a2 a3 ... an的形式。 (所有整數)

這里的問題是,在a [i]之間有一些換行符等。 我需要能夠跳過這樣的換行符,並在一個地方收集屬於一個測試用例的所有a [i]。 我怎么知道這一切? 一連串的WA和運行時錯誤,以及論壇上的一些研究。 我有以下python代碼來嘗試執行此操作,除了我似乎在關鍵位置步履蹣跚而無法完成任務。 我希望在輸入讀數的末尾在列表行[]中具有適當的輸入行。

有人可以在這里告訴我我的錯誤嗎? 還是建議一個更好的方法? 提前致謝..

import sys
#data = sys.stdin.readlines()
#lines = inp.split('\n')
data = sys.stdin.read()
pos = 0
lno = 0

lines = []
while pos<len(data):
    while not data[pos].isdigit():
                   pos = pos + 1
num =data[pos]
print num
cur = pos + 1
numbers_collected = 0

x = [] # temp list
y = []
while numbers_collected < num:

    if cur<len(data) and data[cur].isdigit():
        y.append(data[cur])
        cur = cur + 1
        numbers_collected += 1
    else:
        if cur<len(data)and numbers_collected < num:
            cur = cur + 1
        else:
            break
print x
pos = cur
x.extend(y)
lines.extend(x)



for line in lines:
    print line

這是否可以幫助您回答問題?

In [1]: s1 = "1\n2\n\n3\n\n\n4\n\n\n\n5\n\n\n\n\n6"

In [2]: s1
Out[2]: '1\n2\n\n3\n\n\n4\n\n\n\n5\n\n\n\n\n6'

In [3]: s1.splitlines()
Out[3]: ['1', '2', '', '3', '', '', '4', '', '', '', '5', '', '', '', '', '6']

In [4]: [elem for elem in s1.splitlines() if elem]
Out[4]: ['1', '2', '3', '4', '5', '6']

沒有看到示例輸入,很難回答這個問題。 但是, SPOJ問題頁面未提供示例輸入,因此OP無法提供不可用的內容。

這樣的事情可以幫助您:

numbers = map(int, sys.stdin.read().split())
#numbers = [1,2,3,4,5]

這是一個快速而骯臟的解決方案,因為它將所有空白都視為分隔符。

spoj問題說每個游戲只有一個輸入行:

for line in sys.stdin:
    n, *piles = map(int, line.split())
    assert len(piles) == n

假設在同一游戲中數字之間可能存在換行符:

numbers = (int(s) for line in sys.stdin for s in line.split() if line.strip())
for n in numbers:
    piles = list(itertools.islice(numbers, n))
    assert len(piles) == n

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM