如何从列表中的'redish'中计算'red'?

时间:2016-03-19 02:16:38

标签: python string list split list-comprehension

我有一个棘手的问题 - 我想只计算那些说“红色”的词,并避免那些名字中有红色的词,但不仅仅是'红色'。例如,我想避免计算'redish','darkred'等等。我的代码如下,但我没有太多的运气。输入将是例如:'red','redish','darkred'

我知道我的代码只是在寻找'红色'所以我想我的问题是如何使用split函数来拉出'red'并避免其他所有内容?

cars = input("Cars: ") #'redish, darkred, sortofred, red'
cars_red = cars.split('red') #I only want to count the one 'red'
print('red:', cars_red.count(cars_red))

谢谢,

4 个答案:

答案 0 :(得分:2)

请尝试以下代码:

cars = input("Cars: ") 
cars_red = cars.split(', ') 
count = 0
for word in cars_red:
    if word == 'red':
        count += 1
print('red:',count)

输入:

redish, darkred, sortofred, red

输出

red: 1

答案 1 :(得分:0)

请记住,split()用于根据分隔符“拆分”字符串。它可用于创建颜色列表。然后你需要考虑如何计算所有匹配'红色'。

一种方法是使用reduce()函数进行计数:

# parse input into cars list
cars = input("Cars: ").split(', ')

# Prepend initial count of 0 and accumulate by matching 'red'
cars.insert(0, 0)
count = reduce(lambda count, color: count + (color == 'red'), cars)

print 'red: ' + str(count)

同样可以通过多种方式完成,包括使用for循环。

答案 2 :(得分:0)

要使用特定颜色的汽车进行过滤列表,并对其进行计数,您可以使用filter函数,该函数允许使用非常简洁的代码。 假设您使用的是CSV格式,可能有一些空格(如输入示例中所示)以使用strip进行修剪,main的可能解决方案如下所示:

def filter_cars_by_color(cars, color):
    return list(filter(lambda car: car == color, [car.strip() for car in cars.split(',')]))

if __name__ == "__main__":
    cars = input("Cars: ")
    color = input("Color to search:")
    cars_red =  filter_cars_by_color(cars, color)
    print('Number of cars exactly %s: %d' % (color, len(cars_red)))

请注意,在答案中,我指的是python 3.x,因为即使没有标记,似乎OP正在使用python 3.x.如果使用python 2.7,则应使用raw_input而不是this amazing answer,否则输入将被处理为python表达式。

答案 3 :(得分:-2)

尝试:

var valueToLookup = "red";

var count = cars.filter(function(v) { return v === valueToLookup; }).length;