Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2011 10:01:48

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

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

Офлайн

#2 Дек. 8, 2011 10:03:15

int123
От:
Зарегистрирован: 2011-12-07
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

А в чем же тогда ошибка?(



Офлайн

#3 Дек. 8, 2011 10:12:37

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

Код не смотрел. Код ужасен и не читабелен.

int123, скажите, а зачем Вы используете индексы там где они совершенно не нужны?

def del1(spi,sw):
spi1=[]
for i6 in range(len(spi)):
if spi[i6]!=sw:
spi1.append(spi[i6])
return spi1
тут вообще эта ф-ция не нужна. достаточно remove или filter



Офлайн

#4 Дек. 8, 2011 10:19:13

int123
От:
Зарегистрирован: 2011-12-07
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

cutwater

достаточно remove или filter
Спасибо, буду знать.
зачем Вы используете индексы там где они совершенно не нужны?
Что вы имеете в виду? Названия переменных? Я редко программирую (не основная специальность), поэтому не всегда удачно называю. Привычка.



Офлайн

#5 Дек. 8, 2011 10:24:25

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

Названия переменных?
Нет.
Вот такое:

for k in range(len(mq)):
sa=mq[k]
Лучше заменить на:
for sa in mq:
...
Если нужен не только элемент но и его индекс тогда:
for s, clasn in enumerate(clas):
...

Офлайн

#6 Дек. 8, 2011 10:27:03

int123
От:
Зарегистрирован: 2011-12-07
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

Я не уверена, что это исправит косяк, но попробую заменить, спасибо.



Офлайн

#7 Дек. 8, 2011 10:30:48

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

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

Офлайн

#8 Дек. 8, 2011 11:01:55

int123
От:
Зарегистрирован: 2011-12-07
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

Исправила.

mas=[((1,'a',1),(1,'b',2)),((2,'a',1),(2,'b',4)),((3,'a',1),(3,'b',5)),((4,'a',3),(4,'b',4)),((5,'a',2),(5,'b',5)),((6,'a',2),(6,'b',4))]
t=1
clas=[[1,5],[2,3,4,6]]
def del1(spi,sw):
spi1=[]
for i6 in range(len(spi)):
if spi[i6]!=sw:
spi1.append(spi[i6])
return spi1


i=0
while t==1:
t=0
qw=[]
i=0
for i,clasi in enumerate(clas):
if isinstance(clasi,int):
continue
qw=clas[i]#konkretnyi klass
statver=[['',''],['',''],['',''],['',''],['',''],['',''],['','']]
for er in qw:
#er-poryadok ver6iny v klasse, er-zna4enie.
mq=mas[er-1]#ver6ina v massive
for sa in mq:
for s,clasn in enumerate(clas):
if sa[2] in clasn:
if sa[1]=='a':
u1=sa[0]
statver[u1][0]=sa[1]+str(s)
#spisok kakoe rebro v kakoi klass vedet
else:
u1=sa[0]
statver[u1][1]=sa[1]+str(s)
break
#print(statver)

newclas=[0,0,0,0,0,0,0,0,0,0,0,0,0,0]
checkn=[]
#print(statver)
for i1,ver in enumerate(clasi):
ver=clasi[i1]#сама вершина
for i2,ver1 in enumerate(clasi):
ver1=clas[i][i2]
if isinstance(checkn,list) and i2 in checkn:
continue
if statver[ver]!=statver[ver1]:
newclas[ver]=[ver1];
checkn.append(ver1)
#i=i+1
t=1
else:
#print('ni4ego ne pomenyali')
t=0
checkn.append(ver)
if t==1:
divclas=clas
newclas=del1(newclas,0)
del divclas[i]
divclas=divclas+newclas
clas=divclas
#clas=clas1
print(clas)
Сейчас программа выкидывает последнюю вершину, а все остальное просто разбивает по отдельным вершинам (т.е. по сути минимизации вообще нет). =(



Отредактировано (Дек. 8, 2011 11:02:53)

Офлайн

#9 Дек. 8, 2011 11:59:06

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

я немного ‘причесал’ ваш код и добавил отладку:

while t==1:
t=0
print('Top of loop: ', clas)
for clas_i, qw in enumerate(clas):
print('clas_i = ', clas_i)
print('qw = ', qw)
if isinstance(qw, int):
print('its int!')
continue

statver=[['',''],['',''],['',''],['',''],['',''],['',''],['','']]
for er in qw:
mq=mas[er-1]
print('mq:', mq)
for sa in mq:
print('sa:', sa)
for s, clasn in enumerate(clas):
print('clasn: ', clasn)
x, y, z = sa
if z in clasn:
val = '%s%d' % (y, s)
if y == 'a':
statver[x][0] = val
else:
statver[x][1] = val
break
print('statver: ', statver)

newclas=[0,0,0,0,0,0,0,0,0,0,0,0,0,0]
checkn=[]

for ver in qw:
for i2, ver1 in enumerate(qw):
if i2 in checkn:
print('za6el')
continue
if statver[ver] != statver[ver1]:
newclas[ver]=ver1
checkn.append(ver1)
else:
print('ni4ego ne pomenyali')
t=0
checkn.append(ver)

print('checkn:', checkn)
print('newclas:', newclas)

if t==1:
print('i suda')
newclas = filter(lambda a: a!=0, newclas)
del clas[clas_i]
clas += [newclas]
print('t = ', t)
Сверяйте промежуточные данные и выхлоп с ожидаемыми.

Отредактировано (Дек. 8, 2011 12:02:27)

Офлайн

#10 Дек. 8, 2011 16:23:54

int123
От:
Зарегистрирован: 2011-12-07
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка типа элемента списка

s0rg
Спасибо! Попробую найти ошибку.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version