2015-05-14 2 views
1

Итак, я пытаюсь манипулировать списком с помощью цикла. Изменение моего списка в строку каждого целого числа путем изменения их на четные или нечетные.Отображение нечетных/четных вложенных списков

Input_List = [[1,2,3], [4,5,6], [7,8,9]] 

То, что я хотел бы быть выводимый

Input_List = [['odd','even','odd'],['even','odd','even'],['odd','even','odd']] 

Это код, который я написал до сих пор:

for element in Input_List: 
    for item in element: 
     if item %2==0: 
     Input_List[element][x]="Even" 
    else: 
     Input_List[element][x]="Odd" 
     x+=1 

Любая помощь приветствуется.

ответ

7

Вы были совсем рядом, малейшее изменение необходимо для вашей программы

Input_List=[[1,2,3],[4,5,6],[7,8,9]] 
for i,element in enumerate(Input_List): 
    for j,item in enumerate(element): 
     if item %2==0: 
      Input_List[i][j]="Even" 
     else: 
      Input_List[i][j]="Odd" 
print Input_List 

Здесь я использую enumerate вместо этого, это происходит потому, что вы можете обратиться к элементам в списке, используя их индексы.

Вы можете сделать это легко с помощью map и список понимание

>>> l=[[1,2,3],[4,5,6],[7,8,9]] 
>>> [list(map(lambda x: 'Odd' if x%2 != 0 else 'Even',i)) for i in l] 
[['Odd', 'Even', 'Odd'], ['Even', 'Odd', 'Even'], ['Odd', 'Even', 'Odd']] 

Small Примечание - Ваш список отсутствует запятые, [[1,2,3][4,5,6][7,8,9]] должен быть [[1,2,3],[4,5,6],[7,8,9]]

Другой способ заключается в использовании логического и оператор (&) во вложенном списке comp, например, Padraic упоминает в comments

>>> [['odd' if i & 1 else 'even' for i in sub] for sub in l] 
[['odd', 'even', 'odd'], ['even', 'odd', 'even'], ['odd', 'even', 'odd']] 
+0

В Python 3 вам нужно явно передать возвращаемое значение 'map' в' list', или вы получите список объектов 'map'. – chepner

+0

Сделано! Спасибо за это. –

+1

или '[['odd', если i & 1 else 'even' для i в sub] для sub в Input_List]]' –

8

Вы можете использовать вложенную список понимание:

>>> [['Even' if j%2==0 else 'Odd' for j in i] for i in Input_List] 
[['Odd', 'Even', 'Odd'], ['Even', 'Odd', 'Even'], ['Odd', 'Even', 'Odd']] 
2
input_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
print [['odd' if i%2 else 'even' for i in sublist] 
     for sublist in input_list] 
2

Не знаю, почему никто не сделал Очевидный:

[[['Even','Odd'][n%2] for n in i] for i in Input_List] 

Edit: Я был проинформирован, что я с орфографической ошибкой "запутывание" (хотя я не согласен :-)

+0

Lol! Это редактирование ... Это выглядело лучше: P –

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

  • Нет связанных вопросов^_^