使用“ for in range(0,7,1)”比较两个列表

时间:2019-02-11 10:46:34

标签: python

我想比较两个列表,并为每个元素将最低的列表放在第一位。 这是我的代码:

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,直到整个列表,而不是进行新的比较。

预先感谢(这是练习一项可能的考试任务,这就是为什么我不能使用最小/最大/排序功能等的原因)

3 个答案:

答案 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))