我的代码的目标是编写一个函数并返回一个字符串列表,其中连续的字符串(水果名称)对应于连续的#No.1...#No.5
。水果的整个名称被分成多行,我想在列表中将水果名称显示为没有空格的单个字符串。
我希望我的代码能够返回:
['Pear', 'Apple', 'Cherry', 'Banana', 'Peach']
但我得到了:
['', 'Pear', 'Apple', 'Cherry', 'Banana', 'Peach']
这些是我的文件fruit.txt
的内容:
#NO.1
P
ear
#NO.2
A
pp
l
e
#NO.3
Cherry
#NO.4
Banan
a
#NO.5
Pea
c
h
这些是我的代码:
def read(filename):
myfile = open('fruit', 'r')
seq = ''
list1 = []
for line in myfile:
if line[0] != '#':
seq +=line.rstrip('\n')
else:
list1.append(seq)
seq = ''
list1.append(seq)
return list1
如何避免追加一个不是我想要的空字符串?我想我只需要调整某一行代码的位置,任何建议都值得赞赏。
答案 0 :(得分:4)
您可以更改
else:
到
elif seq:
这会检查seq
是否为空,只有在 public void Generate()
{
Fill();
Fleet();
}
public void Fleet()
{
Ship2(Utility.R(1,9),Utility.R(1,9),Utility.R(4));
Ship3(Utility.R(1,9),Utility.R(1,9),Utility.R(4));
Ship3(Utility.R(1,9),Utility.R(1,9),Utility.R(4));
Ship4(Utility.R(1,9),Utility.R(1,9),Utility.R(4));
Ship5(Utility.R(1,9),Utility.R(1,9),Utility.R(4));
}
public void Ship2(int x, int y, int r)
{
if (r == 0)
{
CreateShip(x, y);
CreateShip(x, (y + 1));
}
if (r == 1)
{
CreateShip(x, y);
CreateShip(x, (y + -1));
}
if (r == 2)
{
CreateShip(x, y);
CreateShip((x-1), (y));
}
if (r == 3)
{
CreateShip(x, y);
CreateShip((x+1), (y));
}
}
public void CreateShip(int x, int y)
{
if (x <= 9 && y <= 9 && x >= 0 && y >= 0)
{
if (Board[x, y] == 'L')
{
Generate();
}
else
{
Board[x, y] = 'L';
}
}
else
{
Generate();
}
}
没有时才会附加。
答案 1 :(得分:1)
从列表中删除空字符串的快速修复:
list1 = filter(None, list1)
regex这个解决方案怎么样?以下是两步过程。首先删除所有空格,如换行符,空格等。然后找到您的模式#No.\d
后面的所有单词:
import re
whitespace = re.compile(r'\s*')
fruitdef = re.compile(r'#NO\.\d(\w*)')
inputfile = open('fruit', 'r').read()
inputstring = re.sub(whitespace, '', inputfile)
fruits = re.findall(fruitdef, inputstring)
print fruits
['Pear','Apple','Cherry','Banana','Peach']
缩小为oneliner:
import re
print re.findall(r'#NO\.\d(\w*)', re.sub(r'\s*', '', open('fruit', 'r').read()))
答案 2 :(得分:1)
如果您需要单行解决方案,请选择
with open('fruit.txt') as f:
content = f.read()
output = [''.join(x.split('\n')[1:len(x.split('\n'))+1]) for x in content.split('#') if len(x.split('\n')) > 1]