所以我在Python中有两个列表。两者都是列表。当我单独打印行时,它们看起来像这样(除了大得多):
PROBABLES
['Name10', 'Ari']
['Name11', 'Atl']
['Name12', 'Bal']
['Name13', 'Bos']
['Name14', 'ChC/CWS']
['Name15', 'Cin']
['Name15', 'Cle']
['Name16', 'Col']
['Name17', 'ChC/CWS']
['Name18', 'Det']工资
['SP', 'Name1', '6900', 'Tor', '@', 'Sea']
['SP', 'Name2', '6900', 'Hou', '@', 'KC']
['SP', 'Name3', '6900', 'LAD', '@' 'NYM']
['SP', 'Name4', '6800', 'ChC', '@', 'Phi']问题是,对于Probables列表中的第二个值,有时它们会有两样东西。参见上面的例子,带有斜杠的例子。我想要做的是用正确的值替换这个值(基本上选择正确的值)。我认为最好的方法就是与第二个列表进行比较。
例如,最后,Probables中的第5行将读为“Name14”,“ChC”,如果Name14在Probables中与Name4的工资相同。这是我目前掌握的密码。
for row in probables:
if '/' in row[1]:
a = row[0] #Name from probables list
b = row[1] #Abbrev. of team
for row in salaries:
if row[1] == a:
c = row[3] #First team involved in game
d = row[5] #Second team involved in game
if b == c:
row[1] = c
elif b == d:
row[1] = d这给了我错误的“回溯”(最近一次调用):文件“c:\ == \Owner\Desktop\Test\matching test.py",第21行,如果b==c: NameError: name 'b‘是未定义的”
我假设这与变量的工作方式以及在循环内部的定义有关,但我不知道如何修复它。有什么帮助吗?谢谢。
发布于 2015-08-03 20:37:36
其他解决方案回答了您的问题(当if '/' ...计算为false时没有分配变量),但是代码仍然存在问题。在第二个循环中,您要重用相同的变量名。在此if语句之后,row将始终设置为“薪资”中的最后一行。
我猜这不是你想要的。您至少应该使用另一个变量。一旦找到匹配项,您可能还想要跳出第二个for循环,这样就不会不必要地遍历整个列表。你可以使用中断
for row in probables:
if '/' in row[1]:
a = row[0] #Name from probables list
b = row[1] #Abbrev. of team
for salary in salaries:
if salary[1] == a:
c = salary[3] #First team involved in game
d = salary[5] #Second team involved in game
break # Stop looping through salaries
if b == c:
row[1] = c
elif b == d:
row[1] = d另一个问题是,在您第一次输入if '/' ...语句之后,c和d将被设置,如果薪资列表中没有匹配,您可以(取决于您的数据)假设您在没有找到什么东西的情况下。为了避免这种情况,我会将if / set语句移到循环中,或者添加另一个变量found。或者两者都有。
for row in probables:
if '/' in row[1]:
a = row[0] #Name from probables list
b = row[1] #Abbrev. of team
found = False
for salary in salaries:
if salary[1] == a:
c = salary[3] #First team involved in game
d = salary[5] #Second team involved in game
if b == c:
row[1] = c
elif b == d:
row[1] = d
found = True
break
if not found:
print "Can't find team for row"
print row
break发布于 2015-08-03 20:12:42
正如注释已经指出的,这是因为您在row1:‘循环中的'if '/’中定义了a、b、c和d,但是大多数条目从未进入该循环。例如,对于probables中的第1行,只有当'/‘在row1中时,才告诉它进入第一个循环。所以它不会进入那个循环。然后告诉它比较b到c,b和c还没有定义,所以它出错了。因为这些行无论如何都不需要修改,所以它们应该完全跳过。您可以再次缩进其他循环,将它们都置于row1中的“if”逻辑之下。
for row in probables:
if '/' in row[1]:
a = row[0] #Name from probables list
b = row[1] #Abbrev. of team
for row in salaries:
if row[1] == a:
c = row[3] #First team involved in game
d = row[5] #Second team involved in game
if b == c:
row[1] = c
elif b == d:
row[1] = d发布于 2015-08-03 20:11:27
这是因为b和c是row1:中"if‘/“语句中的局部变量。因此,当进入第二个if语句时,它不知道b和c是什么,除非它是全局定义的。所以,确保在第二个if语句之前重新定义b和c。
for row in probables:
# define b and c variables here
if '/' in row[1]:
a = row[0] #Name from probables list
b = row[1] #Abbrev. of team
for row in salaries:
if row[1] == a:
c = row[3] #First team involved in game
d = row[5] #Second team involved in game
if b == c:
row[1] = c
elif b == d:
row[1] = dhttps://stackoverflow.com/questions/31795754
复制相似问题