0

私が持っているコードはこれです。数値のリストをリストのリストに基数ソートし、そのリストのリストをファイルに書き込んで、個々のリストを別の行に書き込もうとしています。を使用しようとするとf.write、文字バッファの予期されたエラーが発生します。

from math import log

b = open("radix.in.txt").readlines()
a = [int(i) for i in b]

f = open("radix.out.txt", "w")
def getIndex(num, base, digit_num):
    return (num // base ** digit_num) % base  

def newLists(base):
    return [ [] for i in range(base) ]  

def order(q, base, digit_num):
    placehold = newLists(base)
    for num in a:
        placehold[getIndex(num, base, digit_num)].append(num)  
    return placehold

def radixSort(a, base):
    passes = 3
    new_list = a
    for digit_num in range(passes):
    new_list = order(new_list, base, digit_num)
    list_c = [str(i) for i in new_list]
    print list_c


radixSort(a, 10)

print list_c の後に f.write(list_c) を入れると、このトレースバックが得られます

Traceback (most recent call last):
  File "C:\Users\Nolan Caldwell\Desktop\HW5.py", line 29, in <module>
    radixSort(a, 10)
  File "C:\Users\Nolan Caldwell\Desktop\HW5.py", line 26, in radixSort
    f.write(list_c)
TypeError: expected a character buffer object
4

4 に答える 4

3

list_clist-of-strです。それを単一の に変換するには、次strを使用しますstr.join()

f.write('\n'.join(list_c)+'\n')

strまたは、必要に応じて、それぞれを個別に記述することもできます。

for s in list_c:
  f.write(s+'\n')
于 2013-04-16T20:19:08.200 に答える
0

それを文字列に変換し、literal_eval を使用して読み取り中に配列として取得します

f=open('file.txt','w')
a=[[1,2],[3,4],[4,5]]
b=str(a)
f.write(b)

そして読んでみると、

import ast
f=open('file.txt','r')
a=f.read()
b=ast.literal_eval(a)

write()関数は文字列しか処理できないためです。または、リストのリストを文字列に変換して write を使用します。

于 2013-04-16T20:15:55.483 に答える