2016-08-27 2 views
0

У меня есть список, который я хочу скомпоновать каждый из них., используя функцию карты, чтобы скомпоновать список

это то, что я сделал

def square(x): 
    return x*x 

numbers = [1,2,3,4,5,6] 
squares = map(square, numbers) 


squares_as_strings = str(squares) 


print(','.join(squares_as_strings)) 

но ответ этот

[,1,,, ,4,,, ,9,,, ,1,6,,, ,2,5,,, ,3,6,] 

вместо

[1,4,9,16,25,36] 

ответ

1

Вы карту функцию square, но вы не отображающая функцию str. Ваш squares_as_strings - одна строка, всего списка.

Изменить str(squares)map(str, squares).

+0

Я не понимаю, почему 'str' даже требуется здесь. Результат дается прямо из 'map'. Если это Python 3, все, что вам нужно, это 'list (map (square, numbers))'. – idjaw

1

Просто решить его с простым списком понимания.

squares = [i*i for i in numbers] 

Или, используя карту:

squares = map(lambda x:x*x,numbers) 
+0

Им не позволено, я необходимо использовать функцию карты –

+0

Yusuf: это домашнее задание? –

0

Если вы хотите использовать функцию map, вы можете использовать:

squares = list(map(square, numbers)) 

map функция возвращает map объект.

+0

Это правда в Python 3, но ясно, что он не использует Python 3. Это не его проблема. –

+0

Откуда это видно? Возможно, я что-то пропустил. – Hanshan

+0

Если вы запустите свою программу под Python 2, вы получите именно то, что он показывает. Если вы запустите его программу под Python 3, вы получите совсем другой результат. –

1

Проблема заключается в этих строках:

squares_as_strings = str(squares) 
print(','.join(squares_as_strings)) 

str Применяя к squares массива не делает каждый номер строки. Вместо этого он дает это - '[1, 2, 3]', который представляет собой строку, а не массив строк, как вы хотите.

Теперь вы находитесь join, в результате чего получается запятая между каждым персонажем.

Вы должны вместо этого сделать:

squares = map(str, map(square, numbers)) 

Это сделало бы каждый элемент массива squares в виде строки. И затем используйте свое соединение.


def square(x): 
    return x * x 

nums = [1, 2, 3] 
squares = map(str, map(square, nums)) 

print(','.join(squares)) 
+0

Это то, что я получил [, ', 1, ,, ,,,, 4,' ,,,, ', 9,' ,,, ', 1,6,' ,,,, ', 2, 5, ',,,,', 3,6, ',] –

+1

Вы допустили некоторую ошибку, потому что я протестировал ее также. – Rishav

1
def square(x): 
     return x*x 

numbers = [1,2,3,4,5,6] 
squares = map(square, numbers) 

print(str(squares)) #str() in not needed 
1

Это происходит потому, что вы вызываете join на строку, а не на list. В конечном счете, вы неправильно обрабатываете результат своего map.

Если вы используете Python 2, ваша карта предоставит вам список, поэтому просто распечатайте squares, и у вас будет ожидаемый результат.

Если вы используете Python 3, вы на самом деле есть объект карты, так что вам нужно будет позвонить list на нем, чтобы получить список вашего результата карты:

list(squares) 
Смежные вопросы