【问题标题】:Can you append a string and a number as a single entry to a list in python?您可以将字符串和数字作为单个条目附加到python中的列表吗?
【发布时间】:2015-07-07 16:48:16
【问题描述】:

python 3 中有没有办法将字符串和数字作为单个条目附加到列表中。 例如,如果我有一个类名列表,并且希望能够按字母顺序对列表进行排序,我会使用:

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

添加名称后,这将产生类似以下内容:

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

但是,如果我希望能够为这样的测试分配分数:

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

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

【问题讨论】:

  • 列表列表。或元组列表。
  • 12/15 可以正常工作。当您想要原始原始分数时,只需乘以 15。
  • 我不知道为什么它都是块文本对不起,如果这让人难以理解,我的代码确实有单独的行
  • 9/15 是一个分数,而不是一个日期。
  • 如果需要,您可以使用fractions 来存储有理数

标签: python string list integer append


【解决方案1】:

有一个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)

【讨论】:

    【解决方案2】:

    你可以插入一个包含你想要的元素的元组。

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

    那么a[0][0]将等于“测试”,a[0][1][0]将是12a[0][1][1]将是15

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

    【讨论】:

      【解决方案3】:

      您可以使用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)
      

      编辑:

      考虑了我在 cmets 中与 @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
      

      【讨论】:

      • 仍然会给你意想不到的输出
      • 9/15 === 0 ; 12/15 === 0; 14/15 === 0
      • 原帖确实指定了 Python 3。
      • 好的,现在它基本上是正确的......删除了我的反对票:)(事实上它现在是一个赞成票:))
      • 我看不出有任何理由多次存储最高分数。
      猜你喜欢
      • 2021-05-17
      • 2013-07-05
      • 2012-02-21
      • 2018-09-13
      • 2011-01-04
      • 1970-01-01
      • 2012-12-05
      相关资源
      最近更新 更多