我想比较两个列表,并为每个元素将最低的列表放在第一位。 这是我的代码:
l1=[1,14,26,37,100,86,77]
l2=[2,13,27,38,99,85,78]
newlist=[]
for elementnr in range(0,7,1):
if l1<=l2:
newlist.append(l1[elementnr])
newlist.append(l2[elementnr])
else:
if l1>=2:
newlist.append(l2[elementnr])
newlist.append(l1[elementnr])
print(newlist)
所需的输出是带有比较的新列表:
newlist[1,2,13,14,26,27,37,38,99,100,85,86,77,78]
仅比较两个和两个数字,而不是整个列表。
我的代码的问题是,此新列表会比较前两个数字,但它会一直从l1开始再加l2,直到整个列表,而不是进行新的比较。
预先感谢(这是练习一项可能的考试任务,这就是为什么我不能使用最小/最大/排序功能等的原因)
答案 0 :(得分:2)
您应该比较
if l1[elementnr] <= l2[elementnr] ...
不是
if l1<=l2:
当您比较两个列表时,python会进行逐元素比较。这意味着您的l1
总是比l2
的“低”
答案 1 :(得分:0)
您总是比较整个列表,而不是单个元素。
您可以这样做:
if l1[elementnr] <= l2[elementnr]
,但是通过zip
一起遍历列表更像Python一样:
for l1_elem, l2_elem in zip(l1, l2):
if l1_elem <= l2_elem:
newlist.append(l1_elem)
newlist.append(l2_elem)
else:
newlist.append(l2_elem)
newlist.append(l1_elem)
答案 2 :(得分:0)
我知道您的标题说的是“使用for for in range(0,7,1)”,所以我希望这不是不受欢迎的。但这是一个非常怪异的模式。如果您改用zip
和类似for l1, l2 in zip(l1, l2):
之类的字词,则将更易于阅读,并减少您遇到此类错误的可能性。
例如:
l1=[1,14,26,37,100,86,77]
l2=[2,13,27,38,99,85,78]
newlist=[]
for l1, l2 in zip(l1, l2):
if l1<=l2:
newlist.append(l1)
newlist.append(l2)
else:
newlist.append(l2)
newlist.append(l1)
print(newlist)
您可能还喜欢探索itertools,在这里您可以将链条用于类似的事情:
from itertools import chain
l1=[1,14,26,37,100,86,77]
l2=[2,13,27,38,99,85,78]
l3 = chain(*sorted(zip(l1, l2)))
print(list(l3))