Вывести массив массивов в строку с помощью объединения и сопоставления

#python

#питон

Вопрос:

Предполагая , что у меня есть

 a = [[0, 1], [0, 2]]
  

Я хочу, используя oneliner с join и map , распечатать его как :

 0 1
0 2
  

Самое близкое, что у меня есть, это :

 print("n".join(map("".join, map(str, a))))
  

что дает :

 [0, 1]
[0, 2]
  

Комментарии:

1. Что такое переменная «res»?

2. @QuarticCat map(lambda) уродлив. Вместо этого используйте понимание. 'n'.join(' '.join(map(str, x)) for x in a)

3. @adaba Использует map(lambda) , что некрасиво. Есть ли причина, по которой вы хотите избежать понимания?

4. разве ты не можешь просто сделать простую: for i in a: print (*i)

5. @wjandrea, потому что OP просит join и map s . Если понимание разрешено, вы можете написать 'n'.join(' '.join(str(e) for e in l) for l in a)

Ответ №1:

Вы находитесь на одном уровне итерации:

 In []:
print('n'.join(' '.join(map(str, b)) for b in a))

Out[]:
0 1
0 2
  

Или:

 In []:
print('n'.join(map(' '.join, map(lambda b: map(str, b), a))))

Out[]:
0 1
0 2
  

Или, если вы действительно не хотите использовать лямбда, тогда вы можете использовать functools.partial , но теперь это становится действительно уродливым:

 import functools as ft

In []:
print('n'.join(map(' '.join, map(ft.partial(map, str), a))))

Out[]:
0 1
0 2
  

Комментарии:

1. Что было бы эквивалентно без использования «для b в a»?

2. Вы можете map() , но вам нужен lambda . Обновлено.

Ответ №2:

Вы можете сделать это с помощью map и lambda :

 print("n".join(map(lambda x: " ".join(map(str, x)), a)))
0 1
0 2
  

Редактировать: Только что увидел комментарий с тем же методом, ну что ж.

Ответ №3:

Вы можете сделать это гораздо более чисто, используя цикл for с print вместо однострочного с map и join :

 for x in a:
    print(*x)
  

print автоматически преобразует его аргументы в строку, соединяет их с помощью пробелов и добавляет завершающий символ новой строки.