Найти - Пользователи
Полная версия: Проверка типа элемента списка
Начало » Python для новичков » Проверка типа элемента списка
1 2 3
s0rg
Сорри - проглядел что вы ее в качестве индекса используете в верхнем for, все нормально - не нужно ее изменять.
int123
А в чем же тогда ошибка?(
cutwater
Код не смотрел. Код ужасен и не читабелен.

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

def del1(spi,sw):
spi1=[]
for i6 in range(len(spi)):
if spi[i6]!=sw:
spi1.append(spi[i6])
return spi1
тут вообще эта ф-ция не нужна. достаточно remove или filter
int123
cutwater
достаточно remove или filter
Спасибо, буду знать.
зачем Вы используете индексы там где они совершенно не нужны?
Что вы имеете в виду? Названия переменных? Я редко программирую (не основная специальность), поэтому не всегда удачно называю. Привычка.
s0rg
Названия переменных?
Нет.
Вот такое:
for k in range(len(mq)):
sa=mq[k]
Лучше заменить на:
for sa in mq:
...
Если нужен не только элемент но и его индекс тогда:
for s, clasn in enumerate(clas):
...
int123
Я не уверена, что это исправит косяк, но попробую заменить, спасибо.
s0rg
Это не исправит косяк - но сделает код более опрятным и читабельным, а следовательно более понятным.
int123
Исправила.
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)
Сейчас программа выкидывает последнюю вершину, а все остальное просто разбивает по отдельным вершинам (т.е. по сути минимизации вообще нет). =(
s0rg
я немного ‘причесал’ ваш код и добавил отладку:
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)
Сверяйте промежуточные данные и выхлоп с ожидаемыми.
int123
s0rg
Спасибо! Попробую найти ошибку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB