一次迭代2个列表并比较元素

时间:2018-01-26 23:00:53

标签: python python-3.x list

这只是我家庭作业的一小部分。我试图做的是迭代list1并向后遍历list2并确定list2是否是list1的反转版本。两个列表的长度相等。

示例:list1 = [1,2,3,4]list2 = [4,3,2,1]。 list2是list1的反转版本。您还可以拥有list1 = [1,2,1]list2 = [1,2,1],然后它们将是相同的列表,也会反转列表。

我不是要求确切的代码,我只是不确定我将如何编码。我会跑2圈吗?任何提示都表示赞赏。只是寻找一个基本的结构/算法。

编辑:我们不允许使用任何辅助列表等。

3 个答案:

答案 0 :(得分:1)

您可以在第二个列表上向后迭代,并保留第一个列表开头的项目计数器。如果项目匹配,则跳出循环,否则继续。

这就是它的样子:

def is_reversed(l1, l2):
    first = 0

    for i in range(len(l2)-1, -1, -1):
        if l2[i] != l1[first]:
            return False

        first += 1

    return True

哪个输出:

>>> is_reversed([1,2,3,4], [4,3,2,1])
True
>>> is_reversed([1,2,3,4], [4,3,2,2])
False

虽然在评论中使用内置函数来执行此操作会更容易。

答案 1 :(得分:0)

这里的想法是,只要有元素list1[i],就要将它与元素list2[-i-1]进行比较。根据需要,以下代码在此过程中不会创建辅助列表。

list1 = [1, 2, 3]
list2 = [3, 2, 1]

are_reversed = True

for i in range(len(list1)):
    if list1[i] != list2[-i - 1]:
        are_reversed = False
        break

我想指出内置的range不会在Python3中创建新列表,而是创建range对象。虽然,如果你真的想远离这些,你可以修改代码以使用while循环。

您还可以利用内置函数all使其更加紧凑。以下行实例化一个迭代器,因此该解决方案也不会创建辅助列表。

are_reversed = all(list1[i] == list2[-i - 1] for i in range(len(list2))) # True

答案 2 :(得分:-2)

如果你想获得每个列表的第N个值,你可以用

进行for循环。
if (len(list1) <= len(list2):
    for x in range(0, len(list1):
        if (list1[x] == list2[x]): 
            #Do something
else:
    for x in range(0, len(list2):
        if (list1[x] == list2[x]): 
            #Do something

如果要检查列表的每个值是否包含其他列表的每个值,您可以嵌套for循环

for i in list1:
    for j in list2:
        if (list1[i] == list2[j]):
            //Do something

编辑:将代码更改为Python