如何对列表进行子集设置,直到满足特定条件(使用逻辑运算符、循环或函数)



我有一个txt文件,其中包含每个州的SAT分数信息。我创建了3个空列表,并使用以下代码进行了附加。现在,我想对列表进行子集设置,以便输出显示语言得分>20的状态名。下面是我的数据集示例:

filepath=open('myfile.txt','r')
l=[]
states=[]
verbals=[]
maths=[]
for h in filepath:
n=h.strip()
b=n.split()
l.append(b)
for (state,verbal,math) in l:
states.append(state)
verbals.append(verbal)
maths.append(math)
filepath.close()

State      Verbal  Math
NY          50      100
NJ          10       90
DC          25       50
Carolina     40      10

我尝试了以下代码,但得到错误

Verbal[verbal>20]
**Error:**'>' not supported between instances of 'list' and 'int'

作为python的新手,如果你能用代码提供解释,那就太棒了!

state = ['NY','NJ','DC','Carolina']
verbal = [50,10,25,40]
math = [100,90,50,10]
for idx, _ in enumerate(verbal):
if verbal[idx] > 20:
print("State {0}: Verbal {1}: Math {2}".format(state[idx], verbal[idx], math[idx]))

或使用Tuples:

satScore = [('NY', 50, 100), ('NJ', 10, 90), ('DC', 25, 50), ('Carolina', 40, 10)]
for idx, _ in enumerate(satScore):
if satScore[idx][1] > 20:
print("State {0}: Verbal {1}: Math {2}".format(satScore[idx][0], satScore[idx][1], satScore[idx][2]))

输出:

纽约州:口头50:数学100
华盛顿州:口头25:数学50
卡罗莱纳州:口头40:数学10

您得到了一个错误,因为列表不支持以这种方式选择数据。

你可以使用列表理解根据你想要的只选择分数,这与你的概念非常相似,但适用于列表中的每个项目,只返回匹配的分数。

Verbal_above20 = [i for i in verbals if i > 20]

但是,由于您存储数据的方式,很难获得与密钥相对应的数据的其他部分。我强烈建议你查看熊猫的清洁和绿豆数据。

最新更新