2015-11-10 2 views
0

Я новичок в python с одним линейным контуром.одна строка для цикла для 2d-списка с переменной инкрементацией и поиска 2d-списка

Я хочу, чтобы пользователь вводил данные в 2-й список, предупреждая его об индексе данных, которые они будут вводить. мой код:

flag=0 
x=[[int(input("enter the "+ str(flag)+ "number:")) flag+=1 for x in range(0,col)]for y in range(0,row)] 

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

следующая вещь, что я хочу, чтобы искать 2d список для целого значения в нем

x=[[0,3,2],[1,1,1],[9,2,2]] 
for i,j in enumerate(x): 
    try: 
     y=j.index(1) 
    except ValueError: 
     continue 
    print(i,y) 

выше код отлично работает для одного элемента поиска, но я хочу, индекс каждого 1 в списке. тогда как вышеприведенный код возвращает только индекс первого «1», который он встречает, то есть «1 0»

заблаговременно.

+1

Возьмите этот ком потому что я еще не потратил много времени на ваш вопрос. Но считаете ли вы, что ваш код работает без однострочного интерфейса? Разверните свой код, и как только вы это сделаете, обрезайте его в один лайнер. – Torxed

+0

@Torxed да, я сделал это, и все работает отлично, но проблема в том, что я не могу ее сжать. btw thankx за советы –

+0

Сладкий, можете ли вы опубликовать этот код? Нам легче читать расширенный блок кода, и мы могли бы уменьшить его для вас на основе того, что вы пробовали выше. – Torxed

ответ

2

Ваша проблема заключается в том, что понимание списка должно давать значение, и вы пытаетесь выполнить внутри него flag +=1.

Было бы понятнее, если вы сделали это так:

>>> flag = 0 
>>> row = 1 
>>> col = 3 
>>> x=[[int(input("enter the number [{}][{}]:".format(y, x))) for x in range(0,col)] for y in range(0,row)] 
enter the number [0][0]:1 
enter the number [0][1]:2 
enter the number [0][2]:3 
>>> x 
[[1, 2, 3]] 

В качестве альтернативы, для достижения именно то, что вы хотите, вы можете сделать что-то вроде этого:

>>> y=[[int(input("enter the {} number:".format(x+y*row))) for x in range(0,col)]for y in range(0,row)] 
enter the 0 number:1 
enter the 1 number:2 
enter the 2 number:3 
>>> y 
[[1, 2, 3]] 

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

>>> y=[[int(input("enter the {} number:".format(x+y*row))) for x in range(0,col)]for y in range(0,row)] 
enter the 0 number:0 
enter the 1 number:1 
enter the 2 number:1 
>>> y 
[[0, 1, 1]] 
>>> for arr in y: 
... print [index for (index, val) in enumerate(arr) if val == 1] 
... 
[1, 2] 
+0

thankx много приятель это сработало. –

+0

, а для второй части я хочу искать каждый «1», присутствующий в списке, тогда как мой код возвращает индекс первого «1», который он встречает, т.е. «1 0» –

+0

без проблем, добро пожаловать, чтобы перечислить сообщения :-) – Seeker89