如何使用for循环实现段落字长度列表

时间:2013-05-09 10:31:48

标签: python python-2.7

之前我从未使用过stackoverflow,我通常会留在数学和物理部分。我是反应堆物理学家,而不是程序员,这实际上是我玩Python 2的第一个星期,所以请不要惩罚我。

我应该创建一个列表“wordLenLi”,其中包含使用for循环的小段落中单词的长度。短段落在批处理文件

这是我尝试过的。我也尝试过使用append()方法。这本小小的书并没有太多正义。

st = '''April is the crueles month, breeding
Lilacs out of the dead land, mixing
Memory and desire, stirring
Dull roots with spring rain.'''

x = st.upper()

wordLi = x.split(' ')

for n in wordLi:    
    z = len(n)
    WordLenli = z.split()
    print wordLenLi

2 个答案:

答案 0 :(得分:2)

以下是列表理解。列表推导本质上是写入循环的强大简写。基本列表理解采用[expr for variable in iterable]形式。它遍历iterable中的每个值,将其分配给variable,然后将expr的结果存储在列表中。所以

WordLenLi = [len(word) for word in st.split()]
print(WordLenLi)

可生产

>>> 
[5, 2, 3, 7, 6, 8, 6, 3, 2, 3, 4, 5, 6, 6, 3, 7, 8, 4, 5, 4, 6, 5]

作为for循环,它看起来像这样

WordLenLi = []
for word in st.split(): #for each word in a list of words
    WordLenLi.append(len(word)) #insert the length of the word into WordLenLi

Alternativley,作为示范:

WordLenLi = [(word,len(word)) for word in st.split()]
print(WordLenLi)
>>> 
[('April', 5), ('is', 2), ('the', 3), ('crueles', 7), ('month,', 6), ('breeding', 8), ('Lilacs', 6), ('out', 3), ('of', 2), ('the', 3), ('dead', 4), ('land,', 5), ('mixing', 6), ('Memory', 6), ('and', 3), ('desire,', 7), ('stirring', 8), ('Dull', 4), ('roots', 5), ('with', 4), ('spring', 6), ('rain.', 5)]

你也可以让它比第一次理解时短:

WordLenLi = map(len,st.split())

,根据Jon Clement的建议,您希望用以下内容替换st.split()

re.findall(r'\b[\w\d%s]+\b' % string.punctuation,st)

要求您通过import re,string导入 re 字符串模块。

答案 1 :(得分:0)

所以我喜欢HennyH的答案,但只是因为你没有得到列表理解是唯一可能答案的印象,我们也有:

for word in paragraph.split() : 
    print(word.len())  

原版的问题是:

z = len(n)
WordLenli = z.split()

你试图“拆分”一个数字,好像它是一个字符串。一般课程是:

  • 减少移动件的数量可以减少潜在的错误。
  • 有助于记住每个命名对象的类型。

我认为这些原理在物理学中与在编程中一样有效,但是当麻烦开始时很容易忽视它们。