使用python比较两个列表。为什么Python比较第一个列表的第一个数字和第二个列表的所有数字?
问题描述:
下面是该程序的任务:使用python比较两个列表。为什么Python比较第一个列表的第一个数字和第二个列表的所有数字?
写一个程序,listcomp1.py,其比较两个相等长度的列表由用户输入。应创建由0和1组成的第三个列表,以跟踪列表之间的差异。差异列表中的索引i处的0表示被比较的两个列表中的索引i处的项目是相同的。差异列表中索引i处的1表示比较列表中索引i处的项目不同。
输入:每次两个输出由用户,一个输入列表:一个0和1的示出的组成的列表,其中在所述两个列表中的项目进行比较是相同的或不同
def main():
mylist = [5,7,7,8]
mylist1 = [5,6,7,8]
return_val = 0
final_list = [0]
num1 = mylist1[]
for num in mylist:
if num == num1:
return_val = 0
else:
return_val = 1
final_list.append(return_val)
main()
答
由于你已经设置了num1 = mylist1[]
(我不知道这是有效的Python)。您应该跟踪索引,并使用相同的索引来索引这两个列表。
即:
for i in range(len(mylist)):
if mylist[i] == mylist1[i]:
# stuff
else:
# other stuff
更妙的是,使用一个枚举
for i, val in enumerate(mylist):
if val == mylist1[i]:
# stuff
else:
# other stuff
答
更容易和PEP 8兼容的方式来做到这一点。
def main():
my_list = [5, 7, 7, 8]
my_list_1 = [5, 6, 7, 8]
return [0 if x == y else 1 for x, y in zip(mylist, my_list_1)]
print(main())
另外,您可能会使用列表推导和三元运算符得到一些额外的积分。 ;)
答
我相信你能做到这样的:
mylist = [5,7,7,8]
mylist1 = [5,6,7,8]
return_val = 0
final_list = [0]
num1 = mylist1
for num,num1 in zip(mylist,mylist1):
if num == num1:
return_val = 0
else:
return_val = 1
final_list.append(return_val)
print final_list
要知道,蟒蛇是明智的压痕,因此在你的代码final_list.append(return_val)
被错误放置。此外,你需要迭代两个数组,而不仅仅是一个。所以你的测试num == num1
没有意义。
答
SAME, DIFFERENT = 0, 1
def get_list(prompt, dtype=lambda s:s):
return [dtype(s) for s in input(prompt).split()]
def main():
list1 = get_list("Please enter a space-separated list of integers: ", int)
list2 = get_list("And again: ", int)
differences = [SAME if a==b else DIFFERENT for a,b in zip(list1, list2)]
print(differences)
if __name__=="__main__":
main()
哼......这不是PHP,我不认为'mylist1 []'在Python中是惯用的。 –
以及其他您需要将'final_list.append(return_val)'缩进一次的问题。 –