需要帮助处理列表中的列表

时间:2016-10-02 23:20:58

标签: python-3.x

我参加了一个编程课并完成了我们的第一个任务。我理解它应该如何运作,但显然我没有找到正确的术语来寻求帮助(而且这本书也没那么无用)。

分配是获取提供的数据集(名称和数字)并使用它执行一些操作和计算。

我能够将名字列入一个列表,并且知道我给出的命令的一般格式,但具体情况正在躲避我。我知道您将数字称为名称[0] [1],名称[1] [1]等,但不是如何仅仅引用正在更改的记录。例如,我们必须让程序检查名称是否以Q或更晚的字母开头;如果是,我们将与该名称相关联的数字翻倍。

这是我到目前为止用的???表明我知道某些事情发生了什么,但不确定它被称为搜索它的内容。

它的家庭作业,所以我并不是真的在寻找答案,而是指导找出正确的术语来搜索我的答案。我已经在网站上找到了一些东西(比如统计功能),但是却无法找到书中没有提到的所有内容。

names = [("Jack",456),("Kayden",355),("Randy",765),("Lisa",635),("Devin",358),("LaWanda",452),("William",308),("Patrcia",256)]

length = len(names)
count = 0

while True
    count < length:
    if ??? > "Q"     # checks if first letter of name is greater than Q
        ???     # doubles number associated with name
    count += 1


print(names)     # self-check

numberNames = names     # creates new list

import statistics
mean = statistics.mean(???)
median = statistics.median(???)

print("Mean value: {0:.2f}".format(mean))

alphaNames = sorted(numberNames)     # sorts names list by name and creates new list

print(alphaNames)

3 个答案:

答案 0 :(得分:1)

首先,你需要了解你的名单。为此,请使用for循环:

for person in names:
    print(person)

但名称是元组列表,因此您需要通过访问元组的第一项来获取人名。您就像使用列表一样执行此操作

name = person[0]
score = person[1]

最后要获得角色的ASCII code,请使用ord()函数。如果名称以Q或以上开头,那将会有所帮助。

print(ord('A'))
print(ord('Q'))
print(ord('R'))

这应该足以让你开始使用。

答案 1 :(得分:1)

我看到你问题的一些部分,所以我会在回复中尝试将它们分开。

检查名字的第一个字母是否大于Q

希望这会帮助您使用此处的语法。与list类似,str也支持使用[]语法通过索引进行元素访问。

$ names = [("Jack",456),("Kayden",355)]
$ names[0]
('Jack', 456)
$ names[0][0]
'Jack'
$ names[0][0][0]
'J'
$ names[0][0][0] < 'Q'
True
$ names[0][0][0] > 'Q'
False

与名称相关联的双号

$ names[0][1]
456
$ names[0][1] * 2
912

&#34;如何仅引用正在更改的记录&#34;

我们正在尝试更新与名称相关联的值。

在我之前的代码示例的主题中 - 也就是说,我们希望更新tuplelist中存储在索引0处的names的索引1处的值

但是,tuple不可变的所以如果我们想要使用您正在使用的数据结构,我们必须有点棘手。

$ names = [("Jack",456), ("Kayden", 355)]
$ names[0]
('Jack', 456)
$ tpl = names[0]
$ tpl = (tpl[0], tpl[1] * 2)
$ tpl
('Jack', 912)
$ names[0] = tpl
$ names
[('Jack', 912), ('Kayden', 355)]

对列表中的所有元组执行此操作

我们需要为整个列表执行此操作,看起来您已经使用while循环进行了此操作。用于索引列表的计数器变量名为count,因此只需使用它来索引特定元组,例如:names[count][0]以计算 th 名称或names[count][1]计算 号码。

使用statistics计算meanmedian

如果您想知道如何使用该模块,我建议您查看该模块的文档。以下是mean的示例:

  

<强>平均(数据)

     

返回数据的算术算术平均值。

    $ mean([1, 2, 3, 4, 4])
    2.8

希望这些示例可以帮助您了解继续执行作业的语法,尽管这可能会成为一个长时间的讨论。

您帖子的标题是&#34;需要帮助处理列表中的列表&#34; ...好吧,您的代码示例使用list tuple s

$ names = [("Jack",456),("Kayden",355)]
$ type(names)
<class 'list'>
$ type(names[0])
<class 'tuple'>
$ names = [["Jack",456], ["Kayden", 355]]
$ type(names)
<class 'list'>
$ type(names[0])
<class 'list'>

注意[]()

之间的差异

如果您可以自由地构建数据,那么我建议使用dict(读取:字典)。

答案 2 :(得分:0)

  

我知道您将数字称为名称[0] [1],名称[1] [1]等,但   不是如何仅仅引用正在改变的记录。对于   例如,我们必须让程序检查名称是否以a开头   Q或以后的字母;如果是这样,我们将相关数量加倍   用那个名字。

目前还不完全清楚您在此作业中还需要做些什么,但对于上述问题,请在names列表中引用 i “正在更改的记录” ,只需使用names[i]即可。因此,如果要访问names中的第一条记录,只需使用names[0],因为Python中的索引从零开始。

由于列表中的每个元素都是tuple(也可以编入索引),因此使用names[0][0]names[0][1]等结构可以为元组中的值编制索引,就像您一样指出。

如果您尝试迭代每个名称并检查它是否以“Q”开头,我不确定您使用while True的原因。似乎for循环会更好,除非你的班级尚未到达那里。

至于检查第一个字母是否为'Q',str(字符串)对象的索引与列表和元组类似。例如,要访问字符串中的第一个字母,请参阅以下内容:

>>> my_string = 'Hello'
>>> my_string[0]
'H'

如果您提供更多信息,我们也可以帮助您指导statistics件。但我首先建议你得到一些关于均值和中位数的背景(如果你不熟悉的话)。