Как простые функции списка могут быть реализованы в Python

#python #list

#python #Список

Вопрос:

Я знаю, что в Python есть встроенные функции списка, но мне любопытно, как можно написать функцию для суммирования списка и функцию для обратного списка. Я смог выяснить, как написать некоторые другие функции списка ( sort , count index и т.д.), Но не эти, и я полагаю, что некоторые другие языки не имеют этих встроенных функций.

Может ли кто-нибудь показать мне какой-нибудь код на Python для этих 2 функций, не используя никаких других встроенных функций?

Комментарии:

1. не было бы ничего плохого, если бы это было домашнее задание. Это просто означает, что ответы должны быть более пояснительными и менее ориентированными на решение. Что вы пробовали? Где вы застряли? С какой конкретной проблемой вы столкнулись?

2. Тем не менее, поскольку это звучит точно так же, как «сделай за меня мою домашнюю работу», я бы предпочел помочь кому-нибудь с их домашней работой, если бы они сказали: «Да, это домашнее задание», но также подумали о том, чтобы попытаться составить сумму типов списков.

3. Уоррен, я не лгу об этих вещах, я уже достаточно взрослый, чтобы понять ценность выполнения своей собственной работы, я просто ожидаю, что когда я перейду на другие языки (я специализируюсь на математике, поэтому я не буду брать никаких уроков за пределами этого вступления с python). Чтобы было больше кривой обучения, поэтому я хотел бы видеть как можно больше кода, который я могу понять сейчас. Я понимаю, почему вы были бы подозрительны, хотя

Ответ №1:

Для суммирования списка вы можете сделать:

 sum([1, 2, 3, 4])
  

И для изменения списка, это вернет новый, обратный список с использованием фрагментов Python:

 [1, 2, 3, 4][::-1]
  

Теперь, если вы не хотите использовать встроенные функции:

 def sum(lst):
    s = 0
    for e in lst:
        s  = e
    return s

def reverse(lst):
    l = []
    for e in lst:
        l = [e]   l
    return l
  

Комментарии:

1. Разве суть вопроса не в том, чтобы выполнить это без использования встроенных функций?

2. Извините, я поторопился с ответом. Я отредактировал свой ответ в соответствии с тем, что ожидает OP, не хотите ли пересмотреть downvote?

3. ваш reverse() находится O(N**2) и O(N) в пространстве. Это можно сделать за O (N) шагов и в постоянном пространстве (inplace) . Вы могли бы добавить код к своему ответу, если он вам нравится.

4. Я не перешел по ссылке J.F, но я бы определенно сделал это скорее, for index in range(len(list) / 2): lst[index], lst[-index-1] = lst[-index-1], lst[index] если вы делаете это на месте, или for index in range(len(lst) - 1): l.append(lst[-index-1]) если вы этого не делаете. (В этом коде могут быть отдельные ошибки, не проверял)

5. @agf: мой код такой же, как ваш первый фрагмент, за исключением того, что я использую // (пример выполняется на Python3) и n-1-i индексирую вместо -index-1 . Второй фрагмент неверен, вы могли бы записать его как: L = [lst[i] for i in xrange(len(lst)-1, -1, -1)]

Ответ №2:

Суммируем список

Прямо из руководства по Python:

 >>> def sum(seq):
...     def add(x,y): return x y
...     return reduce(add, seq, 0)
>>> sum(range(1, 11))
55
>>> sum([])
0
  

Это можно было бы сделать как однострочный (… иш), используя lambda (синтаксис анонимной функции Python):

 def sum(seq):
    return reduce(lambda x, y: x   y, seq, 0)
  

Не хотите использовать reduce ?

 def sum(seq):
    total = 0
    for s in seq:
        total  = s
    
    return total
  

Комментарии:

1. Спасибо, Мэтт, я не думал, что руководство было таким полезным, я такой новичок