我有个问题,我有一个double for循环,遍历一个列表列表。
我的问题是,一旦我得到第一个列表,并在该列表中循环,最后一个项目不是一个整数,而是一个包含0L的列表
清单的最后三项如下[…15579L,58L,198L]
当打印出列表中的每个元素时,我得到以下信息: ... 15579个 58个 198个 [0升]
有人知道这是怎么回事吗?我怎样才能避免使用额外的物品?
这是我现在的循环:
myList1 = [[] for _ in range(accountMax+1)]
myList2 = list(myList1)
# accountMax is roughly 78000
index=0
for items in myList1:
print('printing list')
print(items)
for account in items:
print('printing account')
print(account)
myList2[index].append(myList1[account])
index = index+1
这将给出myList1的以下输出:
printing list
[37L, 30L, 142L, 11L, 82L, 143L, 119L, 203L, 154L, 146L, 188L, 156L, 24L, 72L, 9L, 210L, 53420L, 199L, 183L, 200L, 64L, 5L, 77L, 127L, 28L, 12527L, 101L, 159L, 39L, 33203L, 161L, 42L, 197L, 208L, 187L, 17081L, 98L, 148L, 8511L, 196L, 107L, 14614L, 209L, 73L, 87L, 138L, 145L, 31L, 171L, 212L, 61L, 163L, 16L, 5512L, 158L, 110L, 133L, 124L, 100L, 76L, 204L, 84L, 69L, 150L, 202L, 139L, 192L, 5298L, 129L, 45L, 108L, 147L, 170L, 21L, 67L, 30583L, 7427L, 165L, 4762L, 56L, 29L, 26L, 44L, 181L, 11413L, 166L, 79L, 113L, 169L, 123L, 106L, 213L, 121L, 7L, 33190L, 174L, 94L, 33L, 126L, 17245L, 90L, 167L, 201L, 155L, 38L, 63L, 109L, 71L, 18L, 214L, 132L, 164L, 60L, 50L, 194L, 5280L, 103L, 62L, 8080L, 80L, 180L, 191L, 17000L, 120L, 35L, 178L, 78L, 173L, 86L, 43L, 96L, 14927L, 125L, 10L, 134L, 51L, 49L, 55L, 122L, 95L, 17087L, 207L, 26394L, 89L, 141L, 36L, 168L, 193L, 12L, 65L, 136L, 91L, 179L, 53L, 152L, 131L, 144L, 117L, 116L, 105L, 130L, 149L, 162L, 1611L, 118L, 22L, 114L, 7974L, 15896L, 189L, 172L, 182L, 59L, 88L, 27L, 75L, 13L, 2L, 92L, 14L, 57L, 195L, 32L, 215L, 46L, 112L, 17L, 52L, 74L, 70L, 4L, 54L, 1L, 20L, 83L, 186L, 81L, 19L, 140L, 2629L, 160L, 93L, 85L, 1958L, 102L, 176L, 211L, 184L, 41L, 66L, 3L, 135L, 137L, 205L, 25L, 104L, 8L, 157L, 185L, 47L, 206L, 34L, 8048L, 48L, 111L, 151L, 6L, 99L, 97L, 23L, 190L, 68L, 153L, 115L, 177L, 128L, 40L, 175L, 15L, 15579L, 58L, 198L]
打印帐户给出以下信息:
printing account
15
printing account
15579
printing account
58
printing account
198
printing account
[0L]
正如smac89间接指出的那样,你通过做
list(myList1)
来做shallow copy的myList1。这将导致来自myList1
和myList2
的内部列表指向相同的列表:它们不是等价的,它们是相同的列表。所以所有的内部列表都是共享的,而不是重复的。
这会引起很多头痛,可能是你问题的根源。
由于myList1的输入数据没有任何意义,很难告诉您出了什么问题,但是根据您的示例,我可以告诉您一些事情:
这是你的问题所在:
因为如果您的
account
值是您提供给我们的数字:意思是试图从
myList1
中获取索引等于15579
的元素,但不能确定它是否真的存在。这不是为什么可以将零元素作为最后一个元素添加的原因,但这是一个严重的逻辑问题。我建议你一开始就把它修好。如果你有任何理由这么做,请告诉我们你想做什么。它有助于我们更好地了解您的工作流程
示例
注意,当您在
j
中向嵌套列表追加某些内容时会发生什么情况?它还附加到l
。解释
这在你的代码中是如何体现的?发生在这里:
如果我们第一次看程序循环,
index
是零,而您是在内环的第一次迭代中,那么myList2[0] == myList1[0] == items
,根据我们上面看到的例子。所以你实际上是这样做的:
如何将列表从
myList1[account]
追加到items
数组的最后一个位置。因此,当您打印该位置时,会遇到一个数组而不是一个值。这也意味着您在打印附加到items
的第一个列表后会出现异常,从而导致程序崩溃。解决方案
有很多方法可以修复您的代码,但最简单的方法是创建
myList2
与创建myList1
的方法相同。或者
这样,它们都是分开创造的
更好的例子
为了帮助解释我关于崩溃的观点,这里有一个程序,它的作用与OP的相同:
相关问题 更多 >
编程相关推荐