我是python的新手,需要根据列表中的值编写条件语句。我读了一个文本文件,其中包含3列,分别是状态,语言得分和数学得分。我可以找到最大值,但是我正在尝试找出数学得分高于450的州。
我可以获得高于450的数学分数进行打印,但是无法获得高于450的数学状态进行印刷。
#open the file
ACTfile = open ('state_actscores.txt', 'r')
#create blank list for the file
ACTlist = []
for line in ACTfile:
#increment adds one to the count variable
count += 1
#strip the newline at the end of the line and other white space
textline = line.strip()
#split the line on whitespace
items = textline.split()
#add the list of items to the ACTlist
ACTlist.append(items)
ACTmath = []
for line in ACTlist:
ACTmath.append(int(line[2]))
max_math = max(ACTmath)
print(max_math)
state, verbal_score, math_score = ACTlist[0]
states = []
for (state, verbal_score, math_score) in ACTlist:
states.append(state)
max_state = states[ACTverbal.index(max_math)]
print(max_state)
for x in ACTmath:
if x > 450:
print(x)
答案 0 :(得分:2)
单行列表理解应该假设数学列表正确地列出了所有数学得分高于450的列表。
ACTlist = [['Arkansas', '569', '555'], ['Iowa', '593', '602'] ,
['South_Dakota', '594', '597'] , ['Mississippi', '562', '547'],
['North_Dakota', '582', '601']]
#Print all data for score above 450
li = [ item for item in ACTlist if int(item[2]) > 450]
print(li)
#[['Arkansas', '569', '555'], ['Iowa', '593', '602'], ['South_Dakota', '594', '597'], ['Mississippi', '562', '547'], ['North_Dakota', '582', '601']]
#Print just the states above 450
li = [ item[0] for item in ACTlist if int(item[2]) > 450]
print(li)
#['Arkansas', 'Iowa', 'South_Dakota', 'Mississippi', 'North_Dakota']
然后使用max
从上面得到的列表中获取最大列表。
max_score = max(li, key=lambda line: int(line[2]))
print(max_score)
#['Iowa', '593', '602']
答案 1 :(得分:0)
几乎不需要这些混乱:max
可以采用“键功能”,并将返回具有最大键功能的元素。因此,您只需执行max(ACTlist, key=lambda line: int(line[2]))
。这将返回通过数学得分得出的最大ACT(状态,语言和数学的三元组)。
类似于过滤,请使用理解或重新转换:[act for act in actlist if int(act[2]) > 450]
将是数学得分高于450的所有ACT的列表。