这只是我家庭作业的一小部分。我试图做的是迭代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圈吗?任何提示都表示赞赏。只是寻找一个基本的结构/算法。
编辑:我们不允许使用任何辅助列表等。
答案 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