python - 需要备用 Python 列表反向解决方案

标签 python list reverse

我今天参加了工作面试。在此期间,我被要求写下一个可以反转列表的算法。首先,我使用 reversed() 方法提供了答案:

    x = [1,2,3,4,5]
    y = reversed(x)
    for i in y:
        print i

面试的资深开发人员问我是否知道另一种方法,我根据它写下了另一种已知的切片方法:

   x = [1,2,3,4,5]
   y = x[::-1]

不幸的是,他对这个解决方案也不满意,并让我考虑另一种解决方案。几分钟后我说我想不出更好的。他说这对于他们的标准来说还不够好。

我完全同意他的意见,并且在我的代码上进行更多练习也没有问题。我的问题是,如果有的话,什么是我不知道的更好的解决方案。是否还有其他更“程序员”的方式……唯一想到的是递归,但是我是在面试结束后才想到的。 谢谢。

最佳答案

你的两个答案在python方面都很好,所以面试官一定一直在要求你实现自己的方法:

使用递归:

def recur_rev(l):
    return recur_rev(l[1:]) + l[:1] if l else l

或者从 l -1 的长度开始并反向进行的列表 comp 和范围:

l = list(range(100))

print([l[ind] for ind in range(len(l)-1,-1,-1)])

使用 itertools.count:

from itertools import count
cn = count(len(l) -1, -1)

print([l[next(cn)] for ele in l])

为了提高效率,使用生成器表达式:

rev  = (l[next(cn)] for ele in l)

for ele in rev:
    print(ele)

或者使用 map :

print(list(map(l.__getitem__,range(len(l)-1,-1,-1)))) # list needed for python3

[99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

如果没有在 map 上调用列表,我们将得到一个可以在 python3 中迭代的 map 对象,您可以使用 itertools.imap在python2中实现类似的结果

关于python - 需要备用 Python 列表反向解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28369740/

相关文章:

python - chaquopy代码在什么目录下查找Android应用代码的Python代码中导入的Python包

python - sklearn 和 statsmodels OLS 之间摘要的区别

python - 从多个词典提取到 csv

python - python中的对象引用列表

java - 从 EditText 将输入的项目添加到列表(使用 SimpleAdapter)

c++ - 如何在数组中间构造开始和结束迭代器?

嵌入函数中的 C++ 函数反向运行?

python - 使用\u转义unicode字符串

c++ - C++ 中字符串字符的反向迭代

python - 查找列表的笛卡尔积,根据条件过滤掉元素