使用字符串中的单词在Python

时间:2015-08-09 00:26:37

标签: python

这里非常新的python程序员。

我正在尝试列出一些人的姓名和信息(在这种情况下是棒球运动员),并根据这些字符串中的其他信息为每个玩家创建一个不同的对象。例如,我将以下人员列表存储在名为my_players的列表中(当然,我的实际玩家列表要长得多):

SS Derek_Jeter Yankees
P Johan_Santana Mets
C Ivan_Rodriguez Tigers

我想创建Player类的对象,其中Player定义为:

class Player():
    def __init__(self,full_name,pos,team_name):
        self.name = full_name
        self.position = pos
        self.team = team_name

但是我不想手动创建每个对象,我想使用for循环,对于my_players中的每个字符串,使用字符串中的第二个单词作为对象的名称,然后是三个字符串的一部分是属性。也就是说,我想要一个名为Derek_Jeter的对象,其属性为Derek_Jeter,SS,Yankees和另一个名为Johan_Santana的对象,另一个名为Ivan_Rodriguez,但我不想在代码中键入每个对象名。如何以这种方式创建对象?

3 个答案:

答案 0 :(得分:3)

你走了:

content = """SS Derek_Jeter Yankees
P Johan_Santana Mets
C Ivan_Rodriguez Tigers"""

lines = content.split("\n")

players = []
for x in lines:
  pos, name, team = x.split(' ')
  players.append( Player(name, pos, team) )

# players is a list of the Player objects

答案 1 :(得分:3)

players = [('SS', 'Derek_Jeter', 'Yankees'), 
           ('P', 'Johan_Santana', 'Mets'), 
           ('C', 'Ivan_Rodriguez', 'Tigers')]
player_objs = [Player(name, position, team) for position, name, team in players]

编辑抱歉,我误读并认为玩家的位置,名称和团队已经在列表中。

鉴于你的字符串' list'球员:

player_strings = """SS Derek_Jeter Yankees
                 P Johan_Santana Mets
                 C Ivan_Rodriguez Tigers"""

您可以将其转换为适当的列表:

players = [line.split(' ') for line in content.split('\n')]

这大致相当于@ User5402代码的这一部分:

lines = content.split("\n")
players = []
for x in lines:
    pos, name, team = x.split(' ')

它是Python中一个有用的功能,称为列表理解:https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

如果你想将@ User5402的代码压缩成一行,那就是:

player_objs = [Player(name, position, team) for position, name, team in [line.split(' ') for line in content.split('\n')]]

如果您希望能够按姓名呼叫玩家,可以使用字典理解创建一个以Player()个对象作为值的字典(有关更多示例,请参阅:Create a dictionary with list comprehension in Python):

player_objs_dict = {name:Player(name, position, team) for position, name, team in [line.split(' ') for line in content.split('\n')]}

然后您可以通过以下方式获取玩家对象:

#will return the Derek Jeter object
player_objs_dict['Derek_Jeter']

答案 2 :(得分:0)

[Player(x,y,z) for y,x,z in map(lambda s: tuple(s.split()),my_players)]

应该创建对象列表(如果你想要1-liner)