首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找字符的Python字符串长度

查找字符的Python字符串长度
EN

Stack Overflow用户
提问于 2015-05-05 06:13:48
回答 3查看 216关注 0票数 0

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

1.超长字包含10+字符。

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

3.中文字包含4个、5个或6个字符。

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

不过,这段代码似乎不正确,有人能帮我吗?如果有帮助的话,“‘lword”就是这个词。谢谢!

代码语言:javascript
复制
   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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-05 06:16:31

在最后三个字长测试中,您想要使用and而不是“\”。一个更易读的测试是,例如,len(lword) in [7. 8. 9]

此外,第一个单词长度测试应该是>= 10,而不是<= 10

因此,假设print语句是不同操作的占位符,这取决于lword的大小

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2015-05-05 12:31:16

Craig已经指出,您的代码使用的是无效的||语法,并演示了如何避免对pattern.match(lword)进行比您需要的更多的测试。

您可以做的另一个改进是利用Python中的比较可以被链接的事实,例如

代码语言:javascript
复制
x = 5
if 4 <= x <= 6:
    # True

此外,由于您将测试len(lword)不止一次,所以将其存储在变量中而不是一次又一次地计算它是有意义的:

代码语言:javascript
复制
word_length = len(lword)

最后,由于看起来您正在对lword执行类似的操作,不管它的长度如何,所以在完成测试之后执行该操作。您的最终代码可能如下所示:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2015-05-05 06:24:28

看一看这个:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30045466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档