列表中的所有项目都相同?

时间:2016-12-24 16:47:30

标签: python python-2.7 list

我准备了一些代码行来准备要排序的数据。为此,我需要列表中的每个项目都是一个列表。例如,如果我的列表是[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]

2 个答案:

答案 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]]