排序列表输出:UTF-8

问题描述:

我正在接受一个输入文件,其中包含用空格分隔的不同语句的数字列表,并将这些数字相加,然后将两个相邻的数字相加,如果使用UTF-8则输出一个单词。所以如果数字列表是67 5 100 1 11 97 98 10 1 110,这些数字将变成72,101,108,108和111,它们在UTF-8中读取Hello。排序列表输出:UTF-8

目前,我有以下代码:

file_name = input('Enter filename: ') 
input_file = open(file_name, 'r') 
word_list = [] 
count3 = 0 

for line in input_file: 
    count1 = 0 
    count2 = 1 
    count3 += 1 
    word_str = '' 
    line = line.split() 
    length = len(line) 

    while count1 < length: 
     num_char = int(line[count1]) + int(line[count2]) 
     count1 += 2 
     count2 += 2 
     word_str += chr(num_char) 
    word_list.append(word_str) 

print (word_list) 

例如输入文件:

67 5 100 1 11 97 98 10 1 110 
15 72 10 101 47 67 88 20 94 6 22 11 

61 11 93 4 73 39 78 34 17 104 
23 43 11 93 65 52 20 96 66 31 86 24 40 61 102 13 50 51 
73 43 28 73 8 89 31 68 77 27 24 77 42 72 15 24 64 51 
25 75 7 90 10 111 17 16 

从这个代码中,我得到的输出:

['Hello', 'World!', '', 'Happy', 'Bhutanese', "teacher's", 'day!'] 

我的问题是,我需要将列表中的输出与最后一条语句的第一条和最后一条语句的排序进行排序。

因此,对于所提供的数字所期望的输出将是:

['Happy Bhutanese teacher's day!', 
'Hello World!'] 

任何帮助是极大的赞赏

+1

请张贴一个小例子,包括输入,代码,预期产出以及实际输出......或者至少告诉我们,什么是错误的与您当前密码] – 2014-11-05 23:07:50

+2

排序列表通常用做'整理' – njzk2 2014-11-05 23:08:12

+0

确定你不想添加modulo 256?看起来***你不想排序,但重新排序***,颠倒了顺序。 – Deduplicator 2014-11-05 23:13:17

看来你不想要的个人列表 - 你想句子,在句子分开空行的列表。

为了清楚起见,您应该将word_list重命名为sentence_list。我从现在开始将它称为sentence_list

要构建句子,请在每个单词之间留出空格。由于句子跨越多行,因此您不想在每个循环中重新初始化word_str - 您需要保留它。为此,在循环之前将其初始化为一次

word_str = '' 
for line in input_file: 
    ... 

而不是总是附加线的单词列表,word_list.append(word_str),你会希望以不同方式处理它比一个空行字。

如果刚刚处理的行是单词,请在结尾添加一个空格。

如果它是空行,请将当前的word_str添加到sentence_list,并将word_str重置为空字符串。

您可以通过检查行的长度来决定要执行的操作:空白行的长度为0。

if length == 0: 
    sentence_list.append(word_str) 
    word_str = '' 
else: 
    word_str += ' ' 

既然你想最后一句首先出现在列表中,你需要反向列表可以在打印前。

sentence_list.reverse() 
print(sentence_list) 
+0

我真的很感谢你的帮助,并且喜欢你的想法。我的输出只读['Hello World! '],但是我放入你的修改。有什么想法吗? – Fischer 2014-11-06 03:12:34

+1

哈哈,哎呀。 'word_str'只会在找到一个空行时才会附加到'sentence_list'中......您现在可以看到问题了吗?提示:如果输入有3个句子,输出将只是前两个。 – rosshamish 2014-11-06 03:36:03

+0

另外,请注意每个word_str末尾的尾部空格?在将它追加到'sentence_list'之前,您需要删除它。你可以用切片来做到这一点:http://*.com/questions/509211/explain-pythons-slice-notation?rq=1。寻找“最后两个项目除外”的例子,顶部答案给出。 – rosshamish 2014-11-06 03:40:34

然后,而不是使用append,手工添加新词的前面或使用insert

word_list = [] 
... 
for ...: 
... 
    while ...: 
     ... 
    word_list = [word_str] + word_list 
    #word_list.insert(0, word_str) 

print(word_list) 

还有012在list中有函数。你可以只说:

word_list.reverse() 
print(word_list) 
+0

这有助于一些,但我想反过来在输入代码中的空格的订单基础。在前两行或数字开始一组新数字后,如果有空格,我希望这些数字组首先按照61 ...,23 ...,73 ...,25的顺序处理。 。然后过程67 ...,15 ... – Fischer 2014-11-06 00:12:29