您可以将字符串和数字作为单个条目附加到 python 中的列表吗?

Can you append a string and a number as a single entry to a list in python?

python3 中有没有一种方法可以将字符串和数字作为单个条目附加到列表中。 例如,如果我有一个 class 名称的列表,并且希望能够按字母顺序对列表进行排序,我将使用:

classNames = []
classNames.sort()
print(classNames)

一旦附加了名称,这将产生如下内容:

["Adam", "Ben", "Charlotte"]

但是如果我想为这样的测试分配分数:

["Adam" 12/15, "Ben" 9/15, "Charlotte" 14/15]

这可能吗?我可以使用列表来完成还是必须使用其他更复杂的语法?

您可以使用 tuple:

data = [("Adam",12/15), ("Ben",9/15), ("Charlotte",14/15)] 
data.append(("new name", new_numerator/new_denominator))

或者您可以分别存储分子和分母:

data = [( "Adam",(12,15) ), ( "Ben",(9,15) ), ( "Charlotte",(14,15) )] 
data.append(("new name", (new_numerator,new_denominator)))

你也可以放弃 list 而只使用 dict:

data = {
     "Adam":(12,15),
     "Ben":(9,15),
     "Charlotte":(14,15)
}
data["new name"] = (new_numerator,new_denominator)

编辑:

考虑到我在评论中与 @TigerhawkT3 的讨论。虽然是基于假设,但我觉得他说的很对。

如果您的分母在所有数据中都是常数,最好将它存储在某个变量中一次,并且只对每个学生正确回答的问题数量进行评分:

number_of_questions = 15
data = [( "Adam",12 ), ( "Ben",9 ), ( "Charlotte",14 )] 
data.append(("new name", (new_numerator,new_denominator)))

或作为 dict

number_of_questions = 15
data = {
     "Adam":12,
     "Ben":9,
     "Charlotte":14
}
data["new name"] = new_score

您可以插入包含所需元素的元组。

a=[]
a.append(("Test",(12,15)))

a[0][0]等于"Test",a[0][1][0]等于12a[0][1][1]等于15

在我看来,您不需要 12/15 业务。

有一个 fractions library 因此您可以像这样构建数据:

 [("John", Fraction(5,12)), ("Alice", Fraction(8, 13))]

如前所述,您还可以使用命名元组:

from collections import namedtuple
from fractions import Fraction
StudentScore = namedtuple('StudentScore', ['name', 'score'])
x = StudentScore('John', Fraction(5, 12))


In [109]: x.name
Out[109]: 'John'

In [110]: x.score
Out[110]: Fraction(5, 12)