我试图将多行列表从一个函数传递到另一个函数,但我无法弄清楚它是如何完成的。这是我到目前为止的代码:
def readfile():
'''Read a text file; return a string holding the text'''
f = open("numbers.txt", 'r')
line = f.readlines()
f.close()
return line
def dataConversion(lines):
lst = []
for element in lines:
lst = element.strip()
lst = map(int, lst)
print lst
return lst
def evenNumberList(lsts):
print lsts
def main():
lines = readfile()
lsts = dataConversion(lines)
doubledList = evenNumberList(lsts)
main()
dataConversion(lines)函数的输出是:
[4, 3, 8, 8, 5, 7, 6, 0, 1, 8, 4, 0, 2, 6, 2, 6]
[4, 3, 8, 8, 5, 7, 6, 0, 1, 8, 4, 1, 0, 7, 0, 7]
[4, 0, 1, 2, 8, 8, 8, 8, 8, 8, 8, 8, 1, 8, 8, 1]
[4, 5, 5, 2, 7, 2, 0, 4, 1, 2, 3, 4, 5, 6, 7, 7]
[4, 5, 3, 9, 9, 9, 2, 0, 4, 3, 4, 9, 1, 5, 6, 2]
[4, 9, 9, 2, 7, 3, 9, 8, 7, 1, 6, 0, 0]
[4, 9, 9, 2, 7, 3, 9, 8, 7, 0, 0, 1, 7]
[8, 0, 8, 4, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 5, 8, 8, 3, 2, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[5, 4, 9, 1, 9, 4, 6, 9, 1, 5, 4, 4, 4, 9, 2, 3]
[5, 4, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 8]
[3, 7, 8, 2, 8, 2, 2, 4, 6, 3, 1, 0, 0, 0, 5]
[3, 7, 1, 4, 4, 9, 6, 3, 5, 3, 9, 8, 4, 3, 1]
[3, 7, 1, 4, 4, 9, 6, 3, 5, 3, 9, 8, 4, 3, 1]
[3, 7, 8, 7, 3, 4, 4, 9, 3, 6, 7, 1, 0, 0, 0]
[3, 7, 8, 7, 3, 4, 4, 9, 3, 6, 7, 1, 0, 0, 1]
[6, 0, 4, 1, 2, 7, 3, 9, 9, 0, 1, 3, 9, 4, 2, 4]
[6, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7]
[6, 0, 1, 1, 0, 0, 0, 9, 9, 0, 1, 3, 9, 4, 2, 4]
虽然evenNumberList(lsts)函数的输入是:
[6, 0, 1, 1, 0, 0, 0, 9, 9, 0, 1, 3, 9, 4, 2, 4]
如何让它们匹配?我需要evenNumberList(lsts)函数中的所有代码行,而不仅仅是一行。我的教授告诉我,我需要在循环内调用该函数,但我无法弄清楚如何做到这一点。
答案 0 :(得分:0)
我会像这样编写你的代码:
def dataConversion(lines):
temp = []
for element in lines:
converted = map(int, element.strip())
temp.append(converted)
return temp
def evenNumberList(lsts):
return lsts
if __name__ == '__main__':
lines = open("numbers.txt", 'r').readlines()
lsts = dataConversion(lines)
doubledList = evenNumberList(lsts)
print lsts
print doubledList
您遇到的主要问题是正确使用return
。 print
不 return
。您的evenNumberList()
函数完全没有返回。
此外,在dataConversion()
中,您在空列表中使用map()
,这也没有产生实际输出。
我的经验法则:不要在函数中使用print
语句。将它们从函数中移除到实际程序中,因为错误更容易被捕获。
答案 1 :(得分:0)
在dataConversion()
中,每次循环都会重新绑定lst
变量,因此您只返回最后一次迭代的结果数据。
您的主循环表示您希望从此函数获得的内容是lsts
或多个列表,但您只返回一个。
为了帮助您入门,在dataConversion()
中您应该创建一个将作为返回值的变量,可以将其称为lsts
或list_of_lists
,然后在for循环中执行{{1}其中lsts.append(lst)
是您当前从lst
创建的整数列表。