将函数输出放到Python中的列表中

时间:2013-01-20 04:05:54

标签: python list printing output

以下程序的目的是将4个字符的单词从"This"转换为"T***",我已经完成了很难获得该列表和len工作。

问题是程序逐行输出答案,我想知道是否有可以将输出存储回列表并将其作为整个句子打印出来?

感谢。

#Define function to translate imported list information
def translate(i):
    if len(i) == 4: #Execute if the length of the text is 4
        translate = i[0] + "***" #Return ***
        return (translate)
    else:
        return (i) #Return original value

#User input sentense for translation
orgSent = input("Pleae enter a sentence:")
orgSent = orgSent.split (" ")

#Print lines
for i in orgSent:
    print(translate(i))

3 个答案:

答案 0 :(得分:3)

使用列表推导和join方法:

translated = [translate(i) for i in orgSent]
print(' '.join(translated))

列表推导基本上将函数的返回值存储在列表中,正是您想要的。你可以做这样的事情,例如:

print([i**2 for i in range(5)])
# [0, 1, 4, 9, 16]

map函数也可能有用 - 它将函数“映射”到迭代的每个元素。在Python 2中,它返回一个列表。但是在Python 3中(我假设你正在使用它)它返回一个map对象,它也是一个可以传递给join函数的迭代。

translated = map(translate, orgSent)

join方法将括号内的iterable的每个元素与.之前的字符串连接起来。例如:

lis = ['Hello', 'World!']
print(' '.join(lis))
# Hello World!

它不仅限于空间,你可以像这样做一些疯狂的事情:

print('foo'.join(lis))
# HellofooWorld!

答案 1 :(得分:3)

在py 2.x上,您可以在,之后添加print

for i in orgSent:
    print translate(i),

如果您使用py 3.x,请尝试:

for i in orgSent:
    print(translate(i),end=" ")

end的默认值是换行符(\n),这就是每个单词在新行上打印的原因。

答案 2 :(得分:1)

sgeorge-mn:tmp sgeorge$ python s
Pleae enter a sentence:"my name is suku john george"
my n*** is s*** j*** george

您只需要使用,进行打印。请参阅以下粘贴代码部分的最后一行。

#Print lines
for i in orgSent:
    print (translate(i)),

为了您的理解:

sgeorge-mn:~ sgeorge$ cat tmp.py 
import sys
print "print without ending comma"
print "print without ending comma | ",
sys.stdout.write("print using sys.stdout.write ")

sgeorge-mn:~ sgeorge$ python tmp.py 
print without ending comma
print without ending comma | print using sys.stdout.write sgeorge-mn:~ sgeorge$