字符串数以特定字符开头

时间:2017-03-17 05:00:21

标签: python regex python-3.x csv

我试图从下面的列表中找到以字母V开头的国家/地区的数量:

 ['USA', '249', '158', '84', '8.7'],
 ['Uruguay', '115', '35', '220', '6.6'],
 ['Uzbekistan', '25', '101', '8', '2.4'],
 ['Vanuatu', '21', '18', '11', '0.9'],
 ['Venezuela', '333', '100', '3', '7.7'],
 ['Vietnam', '111', '2', '1', '2.0'],
 ['Yemen', '6', '0', '0', '0.1'],
 ['Zambia', '32', '19', '4', '2.5'],
 ['Zimbabwe', '64', '18', '4', '4.7']

代码:

def countCountry(csv1):
    count = 0
    for item in csv1:
        if '/V+' in item[0]:
            count +=1
    return count

不幸的是,count总是返回零。有人可以帮忙吗?

5 个答案:

答案 0 :(得分:2)

尝试使用startswith

def countCountry(csv1):
    count = 0
    for item in csv1:
        if item[0].startswith('V'):
            count +=1
    return count

print countCountry(a)

或者:

def countCountry(csv1):
    return sum([True for i in csv1 if i[0].startswith('V')])

print countCountry(a)

答案 1 :(得分:2)

if '/V+' in item[0]:

Python不使用斜杠来表示正则表达式,in执行精确搜索。导入和使用re或使用str.startswith(),如其他答案所示。

答案 2 :(得分:2)

只需sum(1 for row in csv if row[0][0] == 'V')

答案 3 :(得分:1)

您可以使用startswith

def countCountry(csv1):
    count = 0
    for item in csv1:
        if item[0].startswith('V'):
            count +=1
    return count

或者您可以使用re

来使用正则表达式
def countCountry(csv1):
    count = 0
    for item in csv1:
        if re.match(r'V', item[0]):
            count +=1
    return count

答案 4 :(得分:1)

为什么您的代码无法按预期运行

您编写的代码始终返回零,因为第4行永远不会被评估为True。第4行始终为False,因为它正在检查'/V+'是否与in国家/地区的名称完全一致,'Japmeri/V+na'永远不会是这种情况。此外,如果一个国家确实存在名称与1. def countCountry(csv1): 2. count = 0 3. for item in csv1: 4. if '/V+' in item[0]: 5. count +=1 6. return count

一样古怪,您将收到误报。
def countCountry(csv1):
    count = 0
    for item in csv1:
        country_name = item[0].lower() # to ensure you're always checking against lowercase
        if country_name.startswith('v'): # so that it's easy to read
            count +=1
    return count

修复

以下是如何使您的代码更好,我将比以前的答案更进一步,使其更具可读性和强大。

int[] hrs = { 8, 24, 9, 7, 6, 12, 10, 11, 23, 1, 2, 9, 8, 8, 9, 7, 9, 15, 6, 1, 7, 6, 12, 10, 11, 23, 1, 2, 9, 8 };  

decimal fee;                                        
const decimal HOURLY_RATE = 2.5m, MAX_FEE = 20;     
decimal avg = 0;                                        
decimal total = 0;                                      

Console.WriteLine("Hours  Parking Fee");
for (int count = 0; count < hrs.Length; count++)
{                
   Console.WriteLine("{0,3}", hrs[count]);                
   fee = hrs[count] * HOURLY_RATE;             
   if (fee > MAX_FEE)
   {
      fee = MAX_FEE;
   }
   Console.WriteLine("{0,13}", fee.ToString("C"));
   // calculate average fee paid                    
   {
                total = total + fee;
   }
}
avg = total / 30;     //average = total / 30;                   
Console.WriteLine("average parking fee:  " + avg.ToString("C"));
Console.ReadKey();
Console.ReadKey();

我希望这能回答你的问题。快乐的编码!