我想编写一个函数,将该列表的第一个元素与该列表的最后一个元素进行比较,将该列表的第二个元素与该列表的倒数第二个元素进行比较,依此类推。如果比较的元素相同,我想将该元素添加到新列表中。最后,我想打印这个新列表。
例如,
>>> f([1,5,7,7,8,1])
[1,7]
>>> f([3,1,4,1,5]
[1,4]
>>> f([2,3,5,7,1,3,5])
[3,7]
我正在考虑取第一个(i)和最后一个(k)元素,比较它们,然后提高 i 但降低 k,然后重复该过程。当 i 和 k “重叠”时,停止并打印列表。我尝试在以下代码中形象化我的想法:
def f(x):
newlist=[]
k=len(x)-1
i=0
for j in x:
if x[i]==x[k]:
if i<k:
newlist.append(x[i])
i=i+1
k=k-1
print(newlist)
如果我的代码有任何错误,或者是否有更合适的方法来解决该问题,请告诉我。
由于我是 Python 新手,我不太擅长理解 Python 的复杂术语/功能。因此,如果您在回答中考虑到这一点,我们将受到鼓励。
最佳答案
您可以使用带有 enumerate
的条件列表理解,将索引 i
处的元素 x
与索引 处的元素进行比较 - 1-i
(-1
是列表的最后一个索引):
>>> lst = [1,5,7,7,8,1]
>>> [x for i, x in enumerate(lst[:(len(lst)+1)//2]) if lst[-1-i] == x]
[1, 7]
>>> lst = [3,1,4,1,5]
>>> [x for i, x in enumerate(lst[:(len(lst)+1)//2]) if lst[-1-i] == x]
[1, 4]
或者,正如其他答案中已经建议的那样,使用 zip
。然而,对第一个参数进行切片就足够了;第二个可以是 reversed
列表,因为一旦参数列表之一完成,zip
就会停止,从而使代码更短一些。
>>> [x for x, y in zip(lst[:(len(lst)+1)//2], reversed(lst)) if x == y]
在这两种方法中,(len(lst)+1)//2
等价于 int(math.ceil(len(lst)/2))
。
关于python - 比较第一个和最后一个元素、第二个和第二个最后一个元素等的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45959015/