用python打印不带括号或逗号的列表

2024-09-28 05:27:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个压缩二进制文件的简单压缩算法。我正在扫描该文件并用字符填充列表,以及该字符在其后面出现的次数。但是,由于所有的括号和逗号,列表的格式会使压缩结果变大,我需要去掉这些。我试过几种方法去除它们,但都没用。 以下是编码算法:

def encode(inputString):
characterCount = 1
previousCharacter = '' 
List = []
for character in inputString: 
    if character != previousCharacter:
        if previousCharacter:
            listEntry = (previousCharacter, characterCount) 
            List.append(listEntry) 
            #print lst
        characterCount = 1 
        previousCharacter = character
    else: 
        characterCount += 1
else: 
    try: 
        listEntry = (character, characterCount)
        List.append(listEntry)
        return (List, 0)
    except Exception as e:
        print("Exception encountered {e}".format(e=e)) 
        return (e, 1)`

这是我打印清单的地方。散列注释是我已经尝试过的方法,但没有运气。在

^{pr2}$

这是输出。在

[('1', 2), ('0', 1), ('1', 1), ('0', 4), ('1', 2), ('0', 2), ('1', 4), ('0', 3), ('1', 1), ('0', 3), ('1', 4), ('0', 5), ('1', 1), ('0', 1), ('1', 1), ('0', 4), ('1', 2), ('0', 1), ('1', 2), ('0', 3), ('1', 1), ('0', 3), ('1', 2), ('0', 1), ('1', 1), ('0', 1), ('1', 3), ('0', 4), ('1', 1), ('0', 130), ('1', 5), ('0', 15), ('1', 2), ('0', 8), ('1', 7), ('0', 1), ('1', 8), ('0', 4), ('1', 1), ('0', 2), ('1', 1), ('0', 13), ('1', 2), ('0', 96), ('1', 1), ('0', 26), ('1', 3), ('0', 70), ('1', 1), ('0', 22), ('1', 3), ('0', 1), ('1', 1), ('0', 32), ('1', 1), ('0', 24), ('1', 7), ('0', 1), ('1', 24), ('0', 34), ('1', 2), ('0', 1), ('1', 3), ('0', 24), ('1', 3459), ('0', 1), ('1', 2), ('0', 2), ('1', 1), ('0', 1), ('1', 1), ('0', 2), ('1', 1), ('0', 1), ('1', 3), ('0', 5), ('1', 1), ('0', 10), ('1', 1), ('0', 2), ('1', 3), ('0', 1), ('1', 2), ('0', 9), ('1', 1), ('0', 2), ('1', 1), ('0', 5), ('1', 1), ('0', 18), ('1', 4), ('0', 7), ('1', 1), ('0', 2), ('1', 1), ('0', 1), ('1', 1),

非常感谢任何帮助


Tags: 文件方法列表returnif字符elselist
2条回答

所以你想得到1201110412等等?从元组列表中可以使用itertools.chain

from itertools import chain

value = [('1', 2), ('0', 1), ('1', 1), ('0', 4), ('1', 2), ('0', 2), ('1', 4), ('0', 3), ('1', 1), ('0', 3), ('1', 4), ('0', 5), ('1', 1), ('0', 1), ('1', 1), ('0', 4), ('1', 2), ('0', 1), ('1', 2), ('0', 3), ('1', 1), ('0', 3), ('1', 2), ('0', 1), ('1', 1), ('0', 1), ('1', 3), ('0', 4), ('1', 1), ('0', 130), ('1', 5), ('0', 15), ('1', 2), ('0', 8), ('1', 7), ('0', 1), ('1', 8), ('0', 4), ('1', 1), ('0', 2), ('1', 1), ('0', 13), ('1', 2), ('0', 96), ('1', 1), ('0', 26), ('1', 3), ('0', 70), ('1', 1), ('0', 22), ('1', 3), ('0', 1), ('1', 1), ('0', 32), ('1', 1), ('0', 24), ('1', 7), ('0', 1), ('1', 24), ('0', 34), ('1', 2), ('0', 1), ('1', 3), ('0', 24), ('1', 3459), ('0', 1), ('1', 2), ('0', 2), ('1', 1), ('0', 1), ('1', 1), ('0', 2), ('1', 1), ('0', 1), ('1', 3), ('0', 5), ('1', 1), ('0', 10), ('1', 1), ('0', 2), ('1', 3), ('0', 1), ('1', 2), ('0', 9), ('1', 1), ('0', 2), ('1', 1), ('0', 5), ('1', 1), ('0', 18), ('1', 4), ('0', 7), ('1', 1), ('0', 2), ('1', 1), ('0', 1), ('1', 1)]

print(''.join(map(str, chain.from_iterable(value))))
# 12011104120214031103140511011104120112031103120111011304110130150151208170118041102110131209611026130701102213011103211024170112403412011302413459011202110111021101130511010110213011209110211051101814071102110111

或者,如果您是从一个类似1101000011的字符串开始,您可以使用itertools.groupby

^{pr2}$

听起来你只需要一个字符串而不是一个列表。只需使用字符串而不是附加到列表中。在

而不是

List = []
for character in inputString: 
    if character != previousCharacter:
        if previousCharacter:
            listEntry = (previousCharacter, characterCount) 
            List.append(listEntry) 

用这个

^{pr2}$

或者,您可以将列表转换为末尾的字符串,但最好从字符串开始,而不是先生成列表。在

''.join(x[0] + str(x[1]) for x in List)

相关问题 更多 >

    热门问题