Python:如何避免在for循环中追加空字符串?

时间:2017-01-02 16:18:26

标签: python

我的代码的目标是编写一个函数并返回一个字符串列表,其中连续的字符串(水果名称)对应于连续的#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

如何避免追加一个不是我想要的空字符串?我想我只需要调整某一行代码的位置,任何建议都值得赞赏。

3 个答案:

答案 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]
相关问题