2016-01-18 2 views
0

Я новичок Python пытается писать код, который использует список myList = [['A','B','C'],[4,5,​6],[7,8,9]] и генерирует ниже вывод:Написание вложенного цикла в питона

Вход:

myList = [['A','B','C'],[4,5,​6],[7,8,9]] 

Ожидаемый результат: (по линии)

-A-B-C- 
-4-5-6- 
-7-8-9- 

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

я могу получить:

>>> for i in range (0,myList_len): 
...  print ("-".join(myList[i])) 
... 
A-B-C 

Но я не могу получить эту работу для чисел. Любая помощь приветствуется!

+0

Вы хотите помочь или решить проблему? Если это поможет, начните с чтения, какая ошибка вы получаете за номер. Тогда попытайтесь это исправить. Aaaaaand, вот и все (для этого случая). – tglaria

+0

Откуда взялось 'myList_len'? Вы можете напрямую перебирать список: 'for i в myList:'. – tdelaney

+0

Откуда вы знаете, что это не работает? –

ответ

0

Оператор «join» ожидает список строк, поэтому сначала нужно повернуть свои номера в строки, используя оператор «str», который превращает что-либо в строку.

for l in myList: 
    print '-' + '-'.join([str(x) for x in l]) + '-' 
+0

Исправить. Я починил это :-) –

2

Вы можете использовать map конвертировать из int в str

for l1 in myList: 
    print '-' + '-'.join(map(str, l1)) + '-' 
0

присоединиться работы со строками, а не чисел. Вам необходимо конвертировать:

print ("-".join(str(num) for num in myList[i])) 

Теперь просто добавьте дефисы в начале и в конце, и все готово.

1

При попытке присоединиться номера, вы получите следующее сообщение об ошибке:

TypeError: sequence item 0: expected str instance, int found 

Это потому, что str.join() работает только с str элементов в итерацию, но передать его int объекты вместо этого.

Поэтому, чтобы правильно присоединиться к ним, вам необходимо сначала преобразовать их в строки. Вы можете сделать это, позвонив str по каждому пункту, используя map, или с помощью списка понимание:

>>> lst = [4, 5, 6] 
>>> '-'.join(map(str, lst)) 
'4-5-6' 
>>> '-'.join([str(x) for x in lst]) 
'4-5-6' 
0

Попробуйте следующее:

for sublist in myList: 
    print("-".join(map(str, sublist))) 

Выход:

A-B-C 
4-5-6 
7-8-9 

Если вы хотите использовать дефисы верхнего и нижнего уровня, используйте:

for sublist in myList: 
    print("-" + "-".join(map(str, sublist)) + "-") 

Выход:

-A-B-C- 
-4-5-6- 
-7-8-9- 

В for цикл перебирает подсписков. Вызов map(str, sublist) применяет str к каждому элементу подписок, преобразуя его в строку. Без этого ваши нестрочные записи (т., номера) вызывают ошибки при передаче join.

Смежные вопросы