计算列表中符合特定条件的元素

时间:2016-01-24 23:49:29

标签: 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

但是,计数总是1,当有多个标记小于50时,它不会累积。

我该如何解决这个问题?非常感谢您的帮助

5 个答案:

答案 0 :(得分:0)

您只运行一次代码,因此当然最大数量可以是F

如果您想测试1中的每个元素并查看list的数字,您可以执行以下操作:

< 50

答案 1 :(得分:0)

您正在使用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

count为2(45和36 <50)。这将遍历您指定的索引([3,5,7])。 for循环对每个循环运行检查,如果计算结果为True,则递增count

此外,我已将您的list重命名为my_list(由@ user3100115建议),因为list是列表的内置符号。

我觉得很奇怪你已经知道要检查的索引了。如果您已经知道,这很好。但是,如果你不这样做呢?您可以通过整个my_list查看任何小于50的数字:

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

tryexcept内容是因为i作为int的解释可能会引发错误,如果它实际上不是数字。如果转换失败,except: pass会忽略它。

答案 2 :(得分:0)

以下是一种方法:

count = len([x for x in (list[3], list[5], list[7]) if (int(x) < 50)])

和 - 如此处所示 - 您需要在比较之前转换为int,否则,例如,&#34; 100&#34;将会出现低于&#34; 50&#34;。

答案 3 :(得分:0)

您正在运行一个测试,它会查看多个可能的条件并执行一段代码,如果其中任何一个是真的。

我认为您想要计算有多少标记<50,并报告总数。

让我们做一个简单的版本,然后从那里成长:

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.")

最后,我们可以去完整的Python&#34;并添加列表推导:

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.")

答案 4 :(得分:0)

另一个简短的方法......

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

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

如果大卫有多于或少于三个分数,这也会有效。