如何将名称列表实现到预制类中?

时间:2015-04-07 03:09:50

标签: python list class object

我有一个名为Name的类,它带有名字和名字,只有几个基本功能:

class Name:

def __init__(self, first, last):
    self._first = first
    self._last = last

def first(self):
    return self._first

def last(self):
    return self._last

def __repre__(self):
    print("{} {}".format(self._first, self._last))

现在我需要创建一个函数,该函数获取一个返回Name对象列表的列表。 Text_file只是一个文本文件,其名称逐行显示,名字和姓氏之间的空格。

def name_list(text_file):

  with open(text_file) as f:
      lines = f.read().splitlines()
      for name in lines:
          print(lines)

我意识到我只采取了列表并返回了列表中的名称,而不是列表作为Name对象。

如何使用我的类返回名称对象列表?

4 个答案:

答案 0 :(得分:0)

def name_list(text_file):
    file = open(text_file, 'r')
    list = []
    for line in file:
        first, last = line.split()
        list.append(Name(first, last))
    return list

这将遍历每一行,在空格上分解,创建一个名称对象,将其添加到列表中,然后返回列表。

然后打印出来做类似的事情:

list = name_list(file)
for name in list:
    print('Name: {0} {1}'.format(name._first, name._last))

答案 1 :(得分:0)

最简单的方法就是在白色空间上分割每一行。你在上面有一些冗余的东西:你可以简单地迭代一个文件一行一行 - 不需要调用readlines。

def name_list(text_file):
    names = []
    with open(text_file) as f:
        for line in f:
             first_name, last_name in line.split(' ')  # tuple unpacking
             names.append(Name(first_name, last_name))
    return names

答案 2 :(得分:0)

认为在Python中展示如何将其作为一个单行程可能会很酷。我知道新手可能会有点不那么可读,因此,可能不应该是接受的答案,但值得了解:

>>> names = [Name(*line.split()) for line in open(text_file)]

基本上,我们遍历文本文件中的每一行,在空格上拆分,然后我们使用* - 运算符将值解压缩为类的位置参数。

答案 3 :(得分:0)

另一种可能的解决方案:

name_objects = list()
with open(text_file) as f:
      for each_line in f:
          name_objects.append(Name(each_line.split()))