在python中,字符串/列表需要什么条件语句?

时间:2019-04-26 07:27:38

标签: python

我是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)

2 个答案:

答案 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的列表。