For Loop - Python Qestion

时间:2018-03-08 04:25:09

标签: python-3.x

问题:我想知道for循环中的变量是临时变量吗?或者更改变量也会改变数据。由于在编写下面的代码并在for循环中对'ele'进行更改后,正在更改'data'中的列表。

for ele in data[1:]:
   birthday = ele[2]
   try:
       birthday = birthday.split('-')
       birth_year = birthday[0]
       birth_year = int(birth_year)
   except:
       birth_year = 0
   ele.append(birth_year)
print(data)

数据:

[['last_name', 'first_name', 'birthday', 'gender', 'type', 'state', 'party'],
 ['Bassett', 'Richard', '1745-04-02', 'M', 'sen', 'DE', 'Anti-Administration'],
 ['Bland', 'Theodorick', '1742-03-21', '', 'rep', 'VA', ''],
 ['Burke', 'Aedanus', '1743-06-16', '', 'rep', 'SC', ''],
 ['Carroll', 'Daniel', '1730-07-22', 'M', 'rep', 'MD', ''],
 ['Clymer', 'George', '1739-03-16', 'M', 'rep', 'PA', ''],
 ['Contee', 'Benjamin', '', 'M', 'rep', 'MD', ''],
 ['Dalton', 'Tristram', '1738-05-28', '', 'sen', 'MA', 'Pro-Administration'],
 ['Elmer', 'Jonathan', '1745-11-29', 'M', 'sen', 'NJ', 'Pro-Administration'],
 ['Few', 'William', '1748-06-08', 'M', 'sen', 'GA', 'Anti-Administration']]

1 个答案:

答案 0 :(得分:0)

python中的for ... in ...循环完全按函数处理变量。

如果您迭代的每个元素都是一个不可变的变量,例如strintfloat。它们只能通过重新分配进行更改,因此原始列表中的任何内容都不会更改。

example = [1, 2, 3, 4]
for element in example:
    # We are not changing the element, just reassigning it
    element = 0

print(example)
#: [1, 2, 3, 4]

如果元素是listdictclass等类型,则对其进行更改会更改项目。

example = [[1, 2, 3], [11, 22, 33]]
for element in example:
    # The element is just a reference to the item inside the list
    #  not a copy. Changing it changes the list
    element[0] = 0
    element.append(9001)

print(example)
#: [[0, 2, 3, 9001], [0, 22, 33, 9001]]

但是,如果我只是重新分配该元素,则没有任何改变。

example = [[1, 2, 3], [11, 22, 33]]
for element in example:
    # Again, we are not changing the element, just reassigning it
    element = 0

print(example)
#: [[1, 2, 3], [11, 22, 33]]

基本上,如果您正在进行任务(几乎任何使用=运算符来分配值),您将不会更改原始列表。

如果您正在执行其他任何操作(例如,调用更改.append()或更改索引或键的元素的函数),则需要修改原始文件。

我建议您阅读一些问题的一些答案:Python functions call by reference。它与你的完全不一样,但行为是一样的。