繁体   English   中英

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

[英]Python: how to avoid append an empty string in a for loop?

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

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

你可以改变

    else:

    elif seq:

这将检查seq是否为空,如果不是,则仅附加它。

从列表中删除空字符串的快速修复:

list1 = filter(None, list1)

这个解决方案与正则表达式如何? 以下是两步过程。 首先删除所有空格,如换行符,空格等。 然后找到符合您的模式#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

['梨','苹果','樱桃','香蕉','桃子']


缩小为oneliner:

import re

print re.findall(r'#NO\.\d(\w*)', re.sub(r'\s*', '', open('fruit', 'r').read()))

如果您想要单线解决方案,请选择:

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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM