Python 对符合特定条件的列表中的元素进行计数

Python 对符合特定条件的列表中的元素进行计数,python,Python,我有一份清单,比如: list = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36'] 我想数一数列表中有多少分数低于50,所以我写道: count = 0 if list[3] < '50' or list[5] < '50' or list[7] < '50': count = count + 1 count=0 如果列表[3]

我有一份清单,比如:

   list = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
我想数一数列表中有多少分数低于50,所以我写道:

count = 0
if  list[3] < '50' or list[5] < '50' or list[7] < '50':
    count = count + 1
count=0
如果列表[3]<'50'或列表[5]<'50'或列表[7]<'50':
计数=计数+1
但计数总是1,当有多个小于50的标记时,它不会累积


我怎样才能解决这个问题?非常感谢您的帮助

您只运行了一次代码,因此最大计数当然是
1


如果要测试
列表中的每个元素
,并查看有多少是
<50
的数字,可以执行以下操作:

count = 0
list = ['strings','morestrings','12','4334','anotherstring']
for val in list:
    try:
        val = int(val)
        if val < 50:
            count += 1
    except ValueError:
        continue

print(count)
count=0
列表=['strings'、'morestrings'、'12'、'4334'、'anotherstring']
对于列表中的val:
尝试:
val=int(val)
如果val<50:
计数+=1
除值错误外:
持续
打印(计数)

您正在使用
if
语句检查多个内容。如果其中一个成功,它将运行下一行(仅运行一次),该行递增
count
。尝试更类似于:

my_list = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
count = 0
for i in [3,5,7]:
    if int(my_list[i]) < 50:
        count += 1

try
除外
的东西是因为将
i
解释为
int
可能会抛出错误,如果它实际上不是一个数字。如果转换失败,
except:pass
将忽略它。

这里有一种方法:

count = len([x for x in (list[3], list[5], list[7]) if (int(x) < 50)])
count=len([x代表x in(列表[3],列表[5],列表[7]),如果(int(x)<50)])

并且——如图所示——在比较之前,您确实需要转换为int,否则,例如,“100”将小于“50”。

您正在运行一个测试,该测试查看多个可能的条件,如果其中任何一个条件为真,则执行一段代码


我想你要数一数有多少分数是再短一点

>>> marks = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']

>>> sum(int(x) < 50 for x in marks[3::2])
2
>>分数=['KAYE','DAVID','MUSIC','88','ART','45','FRENCH','36']
>>>求和(分数[3::2]中x的整数(x)<50)
2.

如果David的分数大于或小于三分,这也会起作用。

我已经修复了我发布的代码,很抱歉这些索引(5、7、9)代表什么?不要使用字符串来比较数字,而使用总和来获得计数。。。不要使用内置函数作为变量名索引(5,7,9)来自原始数组,对于这个数组,它们应该是(3,5,7)。对不起
student = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
ALARM = 50

num_alarms = 0

if int(student[3]) < ALARM:
    num_alarms += 1
    print("Alarm! The " + student[2] + " grade is too low!")

if int(student[5]) < ALARM:
    num_alarms += 1
    print("Alarm! The " + student[4] + " grade is too low!")

if int(student[7]) < ALARM:
    num_alarms += 1
    print("Alarm! The " + student[6] + " grade is too low!")

if num_alarms != 0:
    print("There were " + str(num_alarms) + " grades too low.")
student = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']
ALARM = 50

num_alarms = 0

# count from 3 .. by 2
for score in range(3,len(student), 2):
    if int(student[score]) < ALARM:
        print("Alarm! The " + student[score-1] + " grade is too low!")
        num_alarms += 1

if num_alarms != 0:
    print("There were " + str(num_alarms) + " grades too low.")
alarms = [ student[class_] for class_ in range(2, len(student), 2) if int(student[class_ + 1]) < ALARM ]

for class_ in alarms:
    print("Alarm! The " + class_ + " grade is too low!")

num_alarms = len(alarms)

if num_alarms != 0:
    print("There were " + str(num_alarms) + " grades too low.")
>>> marks = ['KAYE', 'DAVID', 'MUSIC', '88', 'ART', '45', 'FRENCH', '36']

>>> sum(int(x) < 50 for x in marks[3::2])
2