列表中的项,但索引始终为0

2024-10-04 03:16:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的问题:

asignaturas_equivalencia_alumno = list(Asignaturas_Equivalencia.objects.filter(matricula=inscripcion.usuario.adicional.matricula, origen_de_equivalencia = "SEP").distinct())

然后循环这些索引并打印索引,如果这在列表和模型的属性中:

^{pr2}$

结果不同,但是索引,索引总是返回0,输出:

True 0 L1C115
True 0 L1PS101
True 0 L1C116
True 0 L1C118
True 0 L1PS105
True 0 L1PS107
True 0 L1PS109
True 0 L1PS111
True 0 L1C113
True 0 L1C114
True 0 L1C117
True 0 L1PS102

谢谢:)

编辑

模型:

class Asignaturas_Equivalencia(models.Model):
    matricula = models.CharField(max_length=10, primary_key=True)
    clave_materia = models.CharField(max_length=9)
    calificacion = models.CharField(max_length=2)
    origen_de_equivalencia = models.CharField(max_length=4)
    fecha_registro = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = 'diccionario_equivalencias_materias'

再次编辑

这个问题的唯一解决方法是使用枚举。在


Tags: 模型true编辑modelsdelengthmaxclass
3条回答

正如其他人正确地提到的,对于有序的iterable成员来说,平等测试可能是脆弱的。但是,如果您想循环使用内容和索引,那么简单地使用enumerate会更容易、更有效。在

for index,_as in enumerate(asignaturas_equivalencia_alumno):
     print _as in asignaturas_equivalencia_alumno, index, _as.clave_materia

检查并再次检查您的主键。在我看来,他们是唯一能把你的平等审查搞砸的东西。在

Django的ORM的__eq__方法在两个属于同一类的具有相同的pk时返回True。我猜当你有两个带有primary_key = True的字段时,它会被混淆。它应该抛出一些错误,但可能只是导致未定义的行为。在

来自the Django Models documentation

"Each model requires exactly one field to have primary_key=True (either explicitly declared or automatically added)."

(重点是我的)

您有不同的项目,如_as.clave_materia所示。我想知道这个类定义是什么样子的。在

也许您编写了自己的__eq__方法,或者类似的方法。如果您这样做了,它可能是有缺陷的,并且总是为对象列表的第一个元素返回True。听起来像是一种解释吗?在

类似这样(IPython会话):

In [44]: class Foo:   
    def __eq__(self, s): return True
   ....:     

In [45]: a = Foo()

In [46]: b = Foo()

In [47]: a == b
Out[47]: True

In [48]: l = [a,b, Foo()]

In [49]: l
Out[49]: 
[<__main__.Foo at 0xb5c68b2c>,
 <__main__.Foo at 0xb670ad0c>,
 <__main__.Foo at 0xb5e0352c>]

In [50]: for item in l:
    print(l.index(item))
   ....:     
0
0
0

相关问题 更多 >