我准备了一些代码行来准备要排序的数据。为此,我需要列表中的每个项目都是一个列表。例如,如果我的列表是[a, b, c, d]
,则列表应该变为[[a], [b], [c], [d]]
,其中a,b,c和d是整数。然而,我的代码会返回[[d], [d], [d], [d]]
:
len_of_list = random.randint(8500, 10000)
val_list = range(len_of_list)
list_one = [[-1]]
for index in range(0, len_of_list):
list_one[0][0] = val_list[index]
val_list[index] = list_one[0]
print val_list
代码中最奇怪的事情是,当倒数第二行被val_list[index] = list_one[0][0]
替换时,它会返回正确的值,而不是[]
。因此,我假设删除最后一个[0]
会返回值为[]
的值。但返回的是最初由[]
围绕所有值的列表中的最后一个整数。这不应该发生,因为list[0][0]
每次迭代都会重置为list[0][0] = val_list[index]
。
那么为什么列表会以[[d], [d], [d], [d]]
而不是[[a], [b], [c], [d]]
的形式返回。当然,该列表至少包含8500个唯一整数,但d
表示列表中的最后一个值,或者只是d = val_list[len(val_list) - 1]
。
答案 0 :(得分:1)
试试这个:
class Category extends Model
{
public function posts()
{
return $this->belongsTo('App\Post');
}
}
答案 1 :(得分:1)
您将list_one[0]
放入val_list[index]
。由于list_one[0]
是一个列表,val_list[index]
会收到其地址,而不是其值。因此,当list_one[0]
的值改变时,即。在每次迭代中,每个val_list[index]
的{{1}}值也会发生变化。
因此,列表中每个索引包含的最终值是最后一个index
。
这是因为[d]
是一个列表,可变。
除此之外,你的代码并不是真正的pythonic。首先,通过编写list_one[0]
来构建长度为len_of_list
的空列表。虽然这在Python 2中有效,但在Python 3中却没有,因为val_list = range(len_of_list)
对象在语义上与列表不同。此外,列表应该通过附加或插入元素来构建,但不能通过制作足够长的空列表然后填充索引来构建。
然后,您使用复杂的代码来构建列表列表,而以下就足够了:
range
使用for index in range(len_of_list):
val_list[index] = [index]
执行相同操作的更基本的pythonic方法是:
append
然而,最pythonic的方式是使用列表理解。如果你有len_of_list = random.randint(8500, 10000)
val_list = list()
for index in range(len_of_list):
val_list.append([index])
,并且想拥有l = [a, b, c, d]
,那么紧张就是:
[[a], [b], [c], [d]]