所以这个问题很难解释。 假设我有一个成绩列表和名称列表,例如:
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中做到这一点?非常感谢!
答案 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"