我想创建两个元素的列表(名为'card'):'NUMBER'和列表'numbers'中的数字。卡片号码中的号码将与卡片中的号码一样多。 为什么我使用该代码获得具有相同编号的卡?
card=['NUMBER','']
numbers = [1,3,5]
All_cards=[]
for i in range(len(numbers)):
All_cards.append(card)
All_cards[i][1]=numbers[i]
print(All_cards)
我得到的结果:[['NUMBER',5],['NUMBER',5],['NUMBER',5]]
我想要的是什么:[['NUMBER',1],['NUMBER',3],['NUMBER',5]]
答案 0 :(得分:1)
这样的东西?
numbers = [1, 3, 5]
all_cards = []
for number in numbers:
all_cards.append(['NUMBER', number])
print(all_cards)
从card = ['NUMBER', '']
开始,每次迭代都会将当前数字分配给同一card
的第二个位置,因此最终得到一个包含最后一个数字的相等元素列表。< / p>
您需要了解,如果您定义一个列表并将其附加到另一个列表,它仍然会引用原始的cards
列表。
我的示例在每次迭代中创建一个新列表。
答案 1 :(得分:1)
您可以使用简单的列表理解来完成此操作:
numbers = [1,3,5]
all_cards = [['NUMBER', i] for i in numbers]
答案 2 :(得分:1)
如果你将一个print语句添加为for循环的最后一行,你就会知道发生了什么。
如下:
[['NUMBER', 1]]
[['NUMBER', 3], ['NUMBER', 3]]
[['NUMBER', 5], ['NUMBER', 5], ['NUMBER', 5]]
[['NUMBER', 5], ['NUMBER', 5], ['NUMBER', 5]]
基本上覆盖了这个值。
您可以像下面一样修改代码以获得预期的输出:
numbers = [1,3,5]
All_cards=[]
for i in xrange(len(numbers)):
# All_cards[i][1]=numbers[i]
card=['NUMBER', numbers[i]]
All_cards.append(card)
print(All_cards)
输出:
[['NUMBER', 1], ['NUMBER', 3], ['NUMBER', 5]]
答案 3 :(得分:0)
你已经有很好的答案可以解决你的问题(我建议你试着理解列表理解的机制,在罗斯曼先生的回答中提到,因为它在很多情况下都非常方便)但是也许你想明白为什么你会有那么奇怪的结果。
你有那么奇怪的结果,因为你可以改变列表的内容..
嗯?当你在口译员的提示下输入时跟着我
>>> ['NUMBER', '']
['NUMBER', '']
>>>
你正在创建一个列表,它会立即丢失(这不是确切的,但是) - 如果你进行了作业
>>> card = ['NUMBER', '']
>>>
您已创建了一个列表(rhs为=
)并为此列表指定了名称(card
,=
的lhs)。
现在使用for
循环和
All_cards.append(card)
并不意味着您要附加列表的副本,而是追加(三次)同一列表。All_cards[i][1]=numbers[i]
表示您在循环的所有三个传递中修改相同的列表。print(All_cards)
时,你看到所有三个元素都是相同的,而内部列表的第二个元素是你在循环中使用的最后一个数字值...... 我是否可以补充一点,这是 每个 Python程序员的成功通道?一路顺风