【问题标题】:Writing words in a list and their positions to a file将列表中的单词及其位置写入文件
【发布时间】:2016-11-03 18:53:44
【问题描述】:

我在学校被分配了一项任务(我将复制粘贴详细信息,因为它会比我更好地解释它)

开发一个程序,识别句子中的单个单词,将它们存储在一个列表中,并将原始句子中的每个单词替换为该单词在列表中的位置。

例如句子

ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY

包含ASK、NOT、WHAT、Your、COUNTRY、CAN、DO、FOR、YOU 可以使用序列从这些单词在此列表中的位置重新创建句子

1,2,3,4,5,6,7,8,9,1,3,9,6,7,8,4,5

将单词列表和这些单词在句子中的位置保存为单独的文件或单个文件。

分析此系统的要求并设计、开发、测试和评估程序以:

  • 识别句子中的单个单词并将它们存储在列表中
  • 为该列表中的单词创建一个位置列表
  • 将这些列表保存为单个文件或单独的文件。

_

到目前为止,我已经能够将单词写入文件但不能写入数字 - 我只得到数字 1 - 非常欢迎任何帮助:)

 words=['ASK','NOT','WHAT','YOUR','COUNTRY','CAN','DO','FOR','YOU','ASK','WHAT','YOU','CAN','DO','FOR','YOUR','COUNTRY'] 
    word_raw = ['ASK','NOT','WHAT','YOUR','COUNTRY','CAN','DO','FOR','YOU']
    numbers = ['']
    if 'ASK' in words:
        numbers.append('0')
        numbers.append('9')
    
    if 'NOT' in words:
        numbers.append('1')
    
    if 'WHAT' in words:
        numbers.append('2')
        numbers.append('10')
        
    if 'YOUR' in words:
        numbers.append('3')
        numbers.append('15')
    
    if 'COUNTRY' in words:
        numbers.append('4')
        numbers.append('16')
    
    if 'CAN' in words:
        numbers.append('5')
        numbers.append('12')
    
    if 'DO' in words:
        numbers.append('6')
        numbers.append('13')
    
    if 'FOR' in words:
        numbers.append('7')
        numbers.append('15')
    if 'YOU' in words:
        numbers.append('8')
        numbers.append('11')
        
        print (numbers)
    for x in range(len(words)):
        MyFile = open('Task2File.txt', 'w')   
        with open("Task2File.txt", mode="w",encoding="utf-8") as my_file:
              for words in word_raw:
                   my_file.write(words+"\n")                                                             
    for x in range(len(numbers)):
        MyFile = open('Task2FileNumbers.txt', 'w')   
        with open("Task2FileNumbers.txt", mode="w",encoding="utf-8") as my_file:
              for numbers in numbers:
                   my_file.write(numbers+"\n")
                   print (numbers)

【问题讨论】:

  • 您的 for 循环似乎有问题,特别是 for numbers in numbers。您可能想要更像for number in numbers 的东西(并更改后续引用以使用number)。此外,无需像您一样分配 MyFile 值。
  • for word in words: print(words.index(word)) ?也许它不是很清楚
  • @JoranBeasley 这不会真正起作用,因为.index() 方法将返回单词的最左侧索引,因此如果句子/列表中有多个单词,它将始终为两次出现返回完全相同的索引。可以选择将额外的 start 参数传递给 .index(sub[, start[, end]]) 方法,但这是另一回事。
  • @Nf4r 根据他的输出数字,我认为这就是他想要的(参见重复的 3)

标签: python list file


【解决方案1】:

这是字典最擅长的事情之一。

sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY"
words = sentence.split()
word_num = 1
word_dict = {}
output = []
for word in words:
    if word not in word_dict:
        word_dict[word] = word_num
        word_num += 1
    output.append(word_dict[word])
print(output)

将列表编写为单个文件以确保它们的顺序相同可能是最简单的。

with open('output.txt', 'w+') as f:
     f.writelines(' '.join([key, str(value), '\n']) 
                  for key, value in sorted(word_dict.items(), key=lambda x: x[1]))

【讨论】:

  • 那么有了这个,我将如何在文件中重写句子和数字?
【解决方案2】:
sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY"
words = sentence.split()
d = {w: words.index(w) + 1 for w in set(words)}
output = [d[word] for word in words]
print(output)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2011-11-16
    相关资源
    最近更新 更多