在phyon中迭代列表时,列表会被修改(无意中)

时间:2016-12-26 22:16:49

标签: python list

当遍历列表时,用户,我想只打印字典中用户的名字来祝贺他们,然后重复使用该列表来打印尚未完成调查的用户。为什么在第一个for循环用户之后,列表是否会被更改,或者如何重置它,因为我认为列表没有被修改。我可以让这个程序工作的唯一方法是在程序开头创建名为testusers的第二个列表。

users = ['jen','seymor', 'patrick', 'tony', 'sarah','edward','billie','mark','jan']  
testusers = users
favorite_languages = {
    'jen': 'python',
    'sarah': 'c',
    'edward': 'ruby',
    'phil': 'python',
    'jan': 'python',
    'mark': 'java',
    }  

print '\nThe following users have taken the poll\n'
for users in favorite_languages.keys():
    print('\t'+users.title() + ", thank you for talking the poll.")

print '\nThe following "PERSONS" have not taken the poll.\n'      
for ditcher in users:  
  if ditcher not in favorite_languages.keys(): 
      print "Hey "+ ditcher.title()+ " take the  poll!"  

2 个答案:

答案 0 :(得分:3)

users = ['jen', 'seymor', 'patrick', 'tony', 'sarah', 'edward', 'billie', 'mark', 'jan']
...
for users in favorite_languages.keys():

一次只能调用users一件事。调用第二个变量user

答案 1 :(得分:2)

您不应该使用for users in favorite_languages.keys():,这样做会覆盖users(您的列表)的原始值。

for循环结束时,users获取字典中的最后一个值(可能是任何键,因为字典未被排序):

>>> users = ['jen','seymor', 'patrick', 'tony', 'sarah','edward','billie','mark','jan']
>>> for users in favorite_languages.keys():
...     print users
...
sarah
phil
mark
jan
edward
jen  # <=== users takes the last printed value
>>> users
'jen'

相反,请为循环变量选择另一个名称:

for u in favorite_languages.keys():
   print('\t'+u.title() + ", thank you for talking the poll.")