我试图得到一份按姓氏字母顺序排列的总统名单,尽管目前正在绘制的文件中列出了名字、姓氏、任职日期和离职日期。在
这是我所能得到的,我需要做什么的任何帮助。我四处寻找一些答案,其中大多数超出了我的理解水平。我觉得我错过了一些小事。我试着把它们都列成一个列表,然后对它们进行排序,但我无法使它们起作用,所以我从这里开始。在
INPUT_FILE = 'presidents.txt'
OUTPUT_FILE = 'president_NEW.txt'
OUTPUT_FILE2 = 'president_NEW2.txt'
def main():
infile = open(INPUT_FILE)
outfile = open(OUTPUT_FILE, 'w')
outfile2 = open(OUTPUT_FILE2,'w')
stuff = infile.readline()
while stuff:
stuff = stuff.rstrip()
data = stuff.split('\t')
president_First = data[1]
president_Last = data[0]
start_date = data[2]
end_date = data[3]
sentence = '%s %s was president from %s to %s' % \
(president_First,president_Last,start_date,end_date)
sentence2 = '%s %s was president from %s to %s' % \
(president_Last,president_First,start_date, end_date)
outfile2.write(sentence2+ '\n')
outfile.write(sentence + '\n')
stuff = infile.readline()
infile.close()
outfile.close()
main()
你说的“他们”是什么意思?在
将行分解为一个项目列表是一个好的开始:这意味着您将数据视为一组值(其中一个是姓氏),而不仅仅是一个字符串。但是,仅仅对列表进行排序是没有用的;Python将从行中提取4个字符串(名字、姓氏等)并将它们按顺序排列。在
你要做的是列出一个列表,然后按姓氏对其进行排序。在
Python的列表提供了一个
sort
方法来对它们进行排序。当你将它应用于总统信息列表时,它将对这些信息进行排序。但是列表的默认排序将按项目进行比较(第一个项目是第一个项目,如果第一个项目相等,则是第二个项目,等等)。您需要按姓氏进行比较,姓氏是子列表中的第二个元素。(即元素1;请记住,我们从0开始计算列表元素。)幸运的是,很容易为Python提供更具体的排序指令。我们可以向sort函数传递一个
key
参数,该参数是一个函数,它将项目“转换”为我们想要排序它们的值。是的,在Python中,所有东西都是一个对象-包括函数,因此将函数作为参数传递是没有问题的。因此,我们希望按“姓氏”排序,因此我们将传递一个接受总统信息列表并返回姓氏的函数(即,元素[1]
)。在幸运的是,这是Python,“包括电池”;我们甚至不必自己编写这个函数。我们得到了一个神奇的工具,可以创建返回序列的第n个元素的函数(这正是我们在这里想要的)。它被称为
itemgetter
(因为它生成了一个获取序列第n项的函数-“item”是更常用的Python术语;“element”是更通用的CS术语),它位于operator
模块中。在顺便说一下,还有更简洁的方法来处理文件的打开/关闭,我们不需要编写显式的循环来处理文件的读取-我们可以直接在文件上迭代(
for line in file:
依次给出文件的行,每次循环一行),这意味着我们可以使用list comprehension
(查找它们)。在你应该做的是把总统们列在一个列表中,对这个列表进行排序,然后打印出结果列表。在
在for循环添加之前:
在拉出名称/日期之后,将此代码放在for循环中
^{pr2}$在for循环之后
然后打印出来:
听起来你想把他们列成一个单子。如果您对此有困难,请向我们展示该尝试产生的代码。这是解决问题的正确方法。在
其他评论:
只是有几点你的代码可以更简单。请随意忽略或随意使用:
可以写成:
以及
可以写成:
相关问题 更多 >
编程相关推荐