繁体   English   中英

Python字符串长度查找字符

[英]Python String length to find character

我正在尝试使用python使用mapper / reduce从文本文件读取输入,并使用AWS EMR Hadoop(mapper)将其输出到许多集群中。 我想根据它们具有的字符数来输出单词。 基本上在下面的if语句的4行中,我想输出4种单词。

1.超长字包含10个以上字符。

2.Long单词包含7、8或9个字符。

3.Medium单词包含4、5或6个字符。

4短字包含3、2或1个字符。

这段代码似乎工作不正常,但是有人可以帮助我吗? “ lword”是一个词,如果有帮助的话。 谢谢!

   if pattern.match(lword) and (len(lword) <= 10:
        print '%s%s%d' % (lword, "\t", 1)

    if pattern.match(lword) and (len(lword) >= 7 || len(lword)<=9 :
        print '%s%s%d' % (lword, "\t", 1)

    if pattern.match(lword) and (len(lword) >= 4 || len(lword)<=6 :
        print '%s%s%d' % (lword, "\t", 1)

     if pattern.match(lword) and (len(lword) >= 1 || len(lword)<=3 :
        print '%s%s%d' % (lword, "\t", 1)

Craig Burgler已经指出您的代码使用了无效的|| 语法,并展示了如何避免测试pattern.match(lword)次数超过您的需要。

您可以进行的另一项改进是利用Python的比较可以链接的事实,例如

x = 5
if 4 <= x <= 6:
    # True

另外,由于您要len(lword)测试len(lword) ,因此将其存储在变量中而不是一遍又一遍地进行计算是有意义的:

word_length = len(lword)

最后,由于看起来不管长度lword您都在用lword做类似的事情, lword在完成测试后就可以执行该操作。 您的最终代码可能如下所示:

if pattern.match(lword):
    word_length = len(lword)
    if 1 <= word_length <= 3:
        category = 1
    elif 4 <= word_length <= 6:
        category = 2
    elif 7 <= word_length <= 9:
        category = 3
    elif word_length >= 10:
        category = 4
    else:
        category = 0  # lword is empty
    print '%s%s%d' % (lword, "\t", category)

您要使用and不是'| |” 在最后三个字长测试中。 更具可读性的测试例如len(lword) in [7. 8. 9] len(lword) in [7. 8. 9]

同样,第一个字长测试应为>= 10而不是<= 10

因此,假设print语句是根据lword的大小执行不同操作的占位符:

if pattern.match(lword):
   if len(lword) >= 10:
       print '%s%s%d' % (lword, "\t", 1)
   elif len(lword) in [7, 8, 9] :
       print '%s%s%d' % (lword, "\t", 1)
   elif len(lword) in [4, 5, 6] :
       print '%s%s%d' % (lword, "\t", 1)
   else: # lword is between one and three characters long
       print '%s%s%d' % (lword, "\t", 1)

看看这个:

if (len(lword)) >= 10:
        print '%s%s%d' % (lword, "\t", 1)

elif (len(lword) >= 7) and (len(lword) <= 9) :
        print '%s%s%d' % (lword, "\t", 1)

elif (len(lword) >= 4) and (len(lword) <= 6) :
        print '%s%s%d' % (lword, "\t", 1)

elif (len(lword) >= 1) and (len(lword) <= 3) :
        print '%s%s%d' % (lword, "\t", 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM