python - 比较第一个和最后一个元素、第二个和第二个最后一个元素等的函数

标签 python list

我想编写一个函数,将该列表的第一个元素与该列表的最后一个元素进行比较,将该列表的第二个元素与该列表的倒数第二个元素进行比较,依此类推。如果比较的元素相同,我想将该元素添加到新列表中。最后,我想打印这个新列表。

例如,

>>> 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/

相关文章:

python - 如何在scrapy中设置json输出的键值对?

python - 在 Pandas Dataframe 中进行分组时的多重聚合

python - python中的条件推理树

Python设置为数组和数据框

.NET 2.0 中的 C# List<T>.ConvertAll

python - 改进元组距离计算算法以提高时间效率

c# - 如何以编程方式列出已安装的视频编解码器?

c++ - 随机整数列表

python - 如何在 Linux 中使用虚拟 IP 地址发送 HTTP 请求?

list - 按秒元素对列表列表进行排序