从单独的文本文件打印列表中的值

时间:2016-09-15 20:38:19

标签: python python-3.x

如何从单独的文本文件中打印单词列表?我想打印所有单词,除非单词的长度为4个字符。

words.txt文件如下所示:

减少狡猾的传播带来的潜在的异常凝固溶解絮絮叨叨

总共有334个单词。我正在尝试显示列表,直到它到达一个长度为4的单词并停止。

wordsFile = open("words.txt", 'r')
words = wordsFile.read()
wordsFile.close()
wordList = words.split()

#List outputs length of words in list

lengths= [len(i) for i in wordList]
for i in range(10):
    if i >= len(lengths):
         break
    print(lengths[i], end = ' ')

# While loop displays names based on length of words in list

while words != 4:
    if words in wordList:
        print("\nSelected words are:", words)
    break

输出

5 9 11 7 6 8 9 11 9 4

样本所需输出

选定的单词是:

减弱

Chicanery

传播

winsay

潜伏

异常

凝固

解散

garrulous

3 个答案:

答案 0 :(得分:1)

要读取文本文件中的所有单词,并打印每个单词,除非它们的长度为4:

with open("words.txt","r") as wordsFile:
  words = wordsFile.read()
  wordsList = words.split()
  print ("Selected words are:")
  for word in wordsList:
    if len(word) != 4:     # ..unless it has a length of 4
      print (word)

稍后在你的问题中,你写了,"我试图显示前10个单词" ...)。如果是这样,请添加一个计数器,如果其值为< = 10,则添加要打印的条件。

答案 1 :(得分:1)

鉴于你只需要前10个单词。阅读所有4行并没有太多意义。你可以安全地阅读第一篇并节省一些时间。

#from itertools import chain

with open('words.txt') as f:

    # could raise `StopIteration` if file is empty
    words = next(f).strip().split()

    # to read all lines
    #words = []
    #for line in f:
    #    words.extend(line.strip().split())

    # more functional way
    # words = list(chain.from_iterable(line.strip().split() for line in f))

print("Selected words are:")
for word in words[:10]:
    if len(word) != 4:
        print(word)

我留下了一些替代方法,但注释掉了。

使用while循环进行编辑。

i = 0
while i < 10:
    if len(words[i]) != 4:
        print(words[i])
    i += 1

由于您知道可以执行多少次迭代,因此可以使用for循环隐藏迭代的机制。一段时间不能很好地促进这一点,并且当你不知道你会做多少次迭代时更好地使用它。

答案 2 :(得分:1)

虽然我会使用for或while循环,就像Paul Rooney建议的那样,您也可以调整代码。 创建列表长度[]时,将创建一个列表,其中包含wordList中包含的所有单词的长度。

然后使用for循环以length []循环前10个长度; 如果需要使用此方法,可以嵌套for循环,比较单词和长度:

#lengths[] contains all the lengths of the words in wordList
lengths= [len(i) for i in wordList]
#foo[] cointains all the words in wordList
foo = [i for i in wordList]

#for the first 10 elements of lengths, if the elements isn't 4 char long
#print foo[] element with same index
for i in range(10):
    if lengths[i] != 4:
        print(foo[i])
    if i >= len(lengths):
        break

我希望这很清楚,这就是你要找的答案