根据子列表

时间:2017-02-03 22:40:04

标签: python matlab indexing

所以这个问题很难解释。 假设我有一个成绩列表和名称列表,例如:

    a=[[90,50,40],'Josh']
    b=[[85,60,90],'Becky']
    c=[a,b]

所以c将是:

    c=[[[90,50,40],'Josh'],[[85,60,90],'Becky']]

现在让我们说这个名单要长得多,而且我对一个获得[100,100,100]成绩列表的学生感兴趣。我怎么能循环呢?

根据我对MATLAB的使用,我知道我使用c [:] [0]来获得成绩的“列表”。

现在我想做点什么:

   target=[100,100,100]
   if target in c[:][0]:
   print 'we got a smart fella in the hood'

我怎么能在python中做到这一点?非常感谢!

4 个答案:

答案 0 :(得分:4)

你应该迭代:

c = [[[90,50,40],'Josh'],[[85,60,90],'Becky'], [[100,100,100],'Mano']]
target = [100,100,100]

for grade, name in c:
    if grade == target:
        print name

将打印:

Mano

如果您希望所有名称的列表满足上述标准,您可以使用列表理解表达式:

names = [name for grade, name in c if grade == target]

答案 1 :(得分:0)

根据您的代码,矩阵 c 将显示为嵌套列表结构。挖掘水平...

c[1] is [[85,60,90],'Becky']
c[1][0] is [85,60,90]
c[1][0][2] is 60

这应该解释给你的命名。现在,您需要检查分数列表,c [*] [0]作为目标值。如果您需要完全匹配,这很简单:构建一个临时值列表并报告是否有点击。

if target in [record[0] for record in c]:
    print "Smart person exists"

如果您需要打印名称列表,请尝试

print [record[1] for record in c if record[0] == target]

这会让你感动吗?

答案 2 :(得分:0)

我建议采用基于类的方法来摆脱嵌套列表

class Student():
    def __init__(self, name, scores):
        self.name = name
        self.scores = scores

    def has_perfect_scores():
        return all(score == 100 for score in self.scores)

然后,

c = [ Student('Josh', [90,50,40]), Student('Becky', [85,60,90]) ]
for student in c:
    if student.has_perfect_scores():
        print 'we got a smart fella in the hood named {}'.format(student.name)

对于任何学生,您可以遍历他们的scores列表

答案 3 :(得分:0)

如果您只需知道是否匹配,您可以:

c=[[[90,50,40],'Josh'],[[85,60,90],'Becky']]
target = [85,60,90]
if target in [i[0] for i in c]:
    print "true"