2015-12-04 3 views
1

Для моего проекта я делаю некоторые вещи и извлекаю определенную строку из вывода командной строки, а затем вставляю ее в список. Оттуда я экспортирую список в учебный файл для последующего использования алгоритма обучения. Проблема заключается в том, когда я вытащить информацию с командной строки она тянетФункция карты в строковом списке, печатающая ячейку памяти

"Number\n" 

Когда я добавить список в текстовый файл не печатает

Number, Number, Number 

Вместо этого он печатает

Number 
Number 
Number 

Он применяет символ новой строки, и это почти бесполезно для меня. С некоторыми googling я нашел эту ссылку Strip all the elements of a string list объясняя, что я думал, именно то, что мне нужно для решения проблемы. Он удаляет символ новой строки и превращает список в то, что мне нужно для последующего использования. ЗА ИСКЛЮЧЕНИЕМ по какой-либо причине он не работает.

Вот мой код

def exportlist(self): 
    file = open('Trainingfile.txt','a+') 
    # i pass it into a variable since i ran into some odd errors if i try 
    # to apply the map function to self.vectorlist 
    my_list= self.vectorlist  
    print(my_list)    # prints [ 'number\n', 'number\n'......] 
    # WHAT THE ABOVE LINK AND OTHERS SAID SHOULD WORK 
    strip_list= map(str.rstrip('\n'), my_list) 
    print(strip_list)   # prints "map object at 0x00000002C...." 
    self.vectorlist = strip_list # test code 
    print(self.vectorlist)  # prints same as strip_list 
    file.close() 

я получить аналогичные результаты, если я использую chr.split вместо полосы. Печать my_list печатает неверно отформатированный список. печать strip_list, который должен быть правильно отформатированным списком, печатает то, что, по моему мнению, является ячейкой памяти «0x0000000002C ....» Все, что я нашел в Интернете, говорит мне, что это не должно печатать это. Он должен печатать правильно отформатированный список. Кто-нибудь знает, почему это происходит? Это происходит каждый раз, когда я использую функцию карты. Я попробовал несколько методов, чтобы удалить «\ n» из моего списка, но он всегда возвращает то же самое.

ответ

2

Вы должны преобразовать свой результат в списке:

strip_list = list(map(str.rstrip('\n'), my_list)) 

В Python 3 map() возвращает объект карты. Это итератор. Вы можете конвертировать в список, используя list() вокруг него.

+0

Просто сделал это, и я не сказал бы он выходит из строя, но это идет от печати сразу до запуска в течение 30 секунд, а затем дает мне ошибку Объект 'str' не может быть вызван – Sam

+0

@Sam: Поскольку вы не должны использовать 'str' в качестве имени переменной, вы использовали' str' как после того, как вы снова переопределяете его как переменную **? –

+0

'print()' медленный. Просто возьмите все 'print()' out. Какая ошибка? У вашего вопроса нет сообщения об ошибке. –

0

из документации ...

Help on class map in module builtins: 

class map(object) 
| map(func, *iterables) --> map object 
| 
| Make an iterator that computes the function using arguments from 
| each of the iterables. Stops when the shortest iterable is exhausted. 

class list(object) 
| list() -> new empty list 
| list(iterable) -> new list initialized from iterable's items 

Таким образом, вы должны обернуть итератор с вызовом списка, чтобы получить список, как:

list(map(f, list))