- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我需要为一个项目制作一个排行榜。必须有3个文件,其中2个文件包含1个类,最后一个文件用于运行程序。我已经完成了所有部分,但是当我调用添加团队的方法时,程序会添加名称,但不会将其插入团队列表(应该这样做)。当我尝试显示列表中的项目时,程序将显示错误消息,而不是显示实际团队。
我该如何解决?任何帮助将不胜感激。 :)
最佳答案
这里有几件事:
当我尝试显示列表中的项目时,程序将显示:team.Team对象,位于0x000000000332A978,用于显示实际的团队。
用户类的默认显示类似于<team.Team object at 0x000000000332A978>
。如果希望它显示不同的内容,则必须告诉Python您要显示的内容。为此有两个单独的功能:__repr__
and __str__
。这个想法是第一个代表程序员,第二个代表用户。如果不需要两个不同的表示形式,只需定义__repr__
,并在需要__str__
时使用它。
因此,解决此问题的一种非常简单的方法是将其添加到Team
类中:
def __repr__(self):
return 'Team("{}")'.format(self._name)
league.addTeam('Dodgers')
,然后调用
print(l._table)
,则将得到
[Team("Dodgers")]
而不是
[<team.Team object at 0x000000000332A978>]
。
def removeTeam(self,team):
self._table.remove(team)
def returnPosition(self,team):
return self._table.index(team)
Team
对象的团队-不是名称,甚至不是从该名称创建的新
Team
,而是对存储在
_table
中的相同对象的引用。这并不是全部有用,您似乎只想用名称来称呼它们。
Team
,以便通过将此方法添加到类中来按名称而不是按对象标识进行比较:
def __eq__(self, other):
return self._name == other._name
Team('Giants') == Team('Giants')
,它将现在为true而不是False。即使第一支球队不在同一个联赛中,并且拥有不同的WL记录,依此类推(例如,像来自旧金山的棒球“巨人”与来自纽约的足球“巨人”),就Python而言有关,他们现在是同一支球队。当然,如果这不是您想要的,则可以编写任何其他更合适的
__eq__
函数。
index
和
remove
函数现在将能够找到具有相同名称的任何
Team
,而不仅仅是完全相同的团队,因此:
def removeTeam(self,team_name):
self._table.remove(Team(team_name))
def returnPosition(self,team_name):
return self._table.index(Team(team_name))
def removeTeam(self,team_name):
self._table = [team for team in self._table if team._name != team_name]
def returnPosition(self,team_name):
return [team._name for team in self._table].index(team_name)
self._table = [team for team in self._table if team._name != team_name]
temp = []
for team in self._table:
if team._name != team_name:
temp.append(team)
self._table = temp
temp
最终会列出表中每个团队的列表,但要删除的团队除外,然后用新的过滤后的团队替换旧的
self._table
。 (写相同想法的另一种方法是使用
filter
,如果您知道该函数。)
for i, value in enumerate(mylist):
if value == value_to_remove:
del mylist[i]
def returnPosition(self,team_name):
return [team._name for team in self._table].index(team_name)
temp = []
for team in self._table:
temp.append(team._name)
index(team_name)
它将找到它。而且,由于两个列表的形状相同,所以我知道这也是在原始
team
列表中使用的正确索引。
_tables
从
list
的
Team
更改为将名称映射到
dict
的
Team
。这可能是最Python化的解决方案,它看起来比编写列表理解来执行简单操作要简单得多。 (它可能也是最有效的,但是除非您拥有一些真正的庞大联赛,否则这几乎没有关系。)然后,您甚至不需要
returnPosition
即可。要做到这一点:
def __init__(self):
self._table={}
def addTeam(self,name):
self._table[name]=Team(name)
def removeTeam(self,team_name):
del self._table[team_name]
def returnPosition(self,team_name):
return team_name
def updateLeague(self,team1_name1,team_name2,score1,score2):
if score1>score2:
self._table[team_name1].win()
self._table[team_name2].loss()
elif score1==score2:
self._table[team_name1].draw()
self._table[team_name2].draw()
elif score1<score2:
self._table[team_name1].loss()
self._table[team_name2].win()
returnPosition
只是返回团队名称本身作为位置。如果您考虑一下,
dict
密钥的使用方式与
list
索引完全相同,因此这意味着有人为“旧” API编写的任何需要
returnPosition
的代码仍可与“新” API一起使用。 (我可能不会尝试将其卖给分配了需要我们使用
returnPosition
的问题的老师,但是对于一个实际的图书馆,我想让我的1.3用户更容易地迁移到2.0,我可能会。)
displayList
和
saveList
中,您遍历
self._table.values()
而不是
self._table
;在
loadList
中,将
self._table.append(team)
更改为
self._table[a] = team
。说到
loadList
:您可能要考虑将那些局部变量从
a
,
b
,
c
和
d
重命名为
name
,
wins
,
losses
和
draws
。
name
,
wins
,
losses
等的成员,然后直接访问它们即可。 (如果有人告诉您这是一种不好的风格,因为它不允许您将来在不更改接口的情况下替换实现,那么这仅适用于Java和C ++,不适用于Python。如果您需要替换实现,则只需阅读
@property
。)
print("""""")
,很容易意外地误算了
"
个字符的数量。 (特别是因为某些IDE实际上会对此感到困惑,并认为多行字符串永远不会结束。)只需执行
print()
。
while
循环(
while x!="q":
)和内部
break
中,您都具有相同的结束条件。您在两个地方都不需要它。要么将其更改为
while True:
,要么摆脱
break
(只需将
options("q")
设为
print("Goodbye")
,这样就不需要在循环内对它进行特殊处理)。
elif
语句时,请考虑是否可以将其转换为短函数的
dict
。在这种情况下,我不确定这是个好主意,但始终值得思考并做出明确的决定。
def addTeam():
name=input("Enter the name of the team:")
l.addTeam(name)
def removeTeam():
teamToRemove=input("Enter the name of the team you want to remove:")
l.removeTeam(teamToRemove)
def recordGame():
team1=input("What is the name of the team?")
ans1=int(input("Enter the number of goals for the first team:"))
team2=input("What is the name of the team?")
ans2=int(input("Enter the number of goals for the second time:"))
l.updateLeague(team1,team2,ans1,ans2)
optionsdict = {
"a": addTeam,
"d": l.displayList,
"s": l.saveList,
"l": l.loadList,
"r": removeTeam,
"rec": recordGame,
}
def options(x):
func = optionsdict.get(x)
if func:
func()
关于python - Python中的联赛表-它不会将球队插入列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750909/
如标题所示,ans_list是一个答案列表,ans_index是一个数字(答案在词汇表中的索引,但与atm无关) 这里生成的 tree.anslist 是什么? (例如,仅针对第一个),忽略迭代。 f
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我目前将用户的输入存储在逗号分隔的列表中,如下所示: Userid | Options 1 | 1,2,5 用户在一个数组形式中勾选一组选项,然后用逗号连接起来 1,2,5 然后 MySQ
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将具有一个元素的东西拿走。 这与 How do I “flatte
我想知道如何完全展平列表和包含它们的东西。除其他外,我想出了一个解决方案,它可以将具有多个元素的东西滑倒并将它们放回原处,或者在滑倒后将带有一个元素的东西拿走。 这与 How do I “flatte
这个问题已经有答案了: Convert nested list to 2d array (3 个回答) 已关闭 7 年前。 java中有没有快捷方式可以转换 List> 到 String[][] ?
我在排序时遇到问题 List> 。我创建了一个自定义比较器,在其中编写了对数据进行排序的代码。 public class CustomComparator implements Comparator
这个问题已经有答案了: 已关闭10 年前。 Possible Duplicate: Java Generics: Cannot cast List to List? 我只是想知道为什么下面的java代
试图想出一个 LINQy 方法来做到这一点,但我什么也没想到。 我有一个对象列表<>,其中包含一个属性,该属性是逗号分隔的字母代码列表: lst[0].codes = "AA,BB,DD" lst[1
假设我有这些任务: points = [] point = (1, 2) 我怎么会这样做: points += point 它工作得很好,并且给了我点 = [1, 2]。但是,如果我这样做: poin
如何在 scala 中将 List[Task[List[Header]]] 类型转换为 Task[List[Header]]。 我有一个方法返回 Task[List[Header]] 并多次调用 do
如何在 Java 中查找二维列表的元素? 我有一个参数为 List> 的函数我想知道如何找到这个列表的行和列。 最佳答案 如果你喜欢 List> obj 然后你就可以像这样访问 obj.get(cur
分配 List到 List工作正常。 分配 List>到 List>不编译。 代码 public class Main { public static void main(String[] a
我正在用 Java 编写一个方法,该方法必须接收并迭代 Serializable 的 List。 有什么区别: public void myMethod(List list) { } 和 public
我看到很多人想用 mvvm 更新网格/列表/树的一部分,但他们不想刷新整个列表。 对于所有遇到此问题的人,我做了以下示例。 希望这对你有用。 最佳答案 这是一个简单的例子。整个代码中最重要的是: Bi
我正在为现有的 C++ 库编写包装器,该库使用列表,其中 T 是自定义结构。我被建议使用 vector 而不是列表,但我试图避免修改库。 为了更好地理解这个场景,我做了一个简单的应用程序,使用一个列表
List list List list 这两种声明有什么区别吗? 谢谢, 最佳答案 是的。 List可以包含所有派生自 Base 的不同事物的混合物. List包含同质项(从某种意义上说,它们必须全部
有人可以尽可能详细地解释以下类型之间的区别吗? List List List 让我更具体一点。我什么时候想使用 // 1 public void CanYouGiveMeAnAnswer(List l
我有一个元组列表,每个元组都是一对列表。所以我的数据看起来像: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
也许是一个时髦的标题,但我遇到了以下问题: 给定一个类型为 (a * b) list 的列表,我想创建一个类型为 (a * b list) list 的新列表。一个例子: 给定列表 let testL
我是一名优秀的程序员,十分优秀!