Как получить разницу в каждом подсписке списка?

Я хочу создать список, в котором будет разница между последним и первым элементом каждого подсписка списка. Подсписки - это подсписки из N элементов, поэтому в моем окончательном списке будет len(list)/K+1.


Вот небольшой пример:

У меня есть список: [0, 10, 20, 5, 10, 30, 20, 35]. Я выбрал максимум 3 элемента для каждого подсписка. У меня будут следующие подсписки [0, 10, 20], [5, 10, 30], [20, 35].

Теперь я применяю разницу в каждом подсписке и получаю значения 20, 25, 15 (потому что 20-0, 30-5 и 35-20).

Я хочу, чтобы результат был в списке, чтобы иметь [20, 25, 15] в качестве конечного результата.

-9
задан TylerH 3 September 2019 в 14:25
поделиться

2 ответа

Вот сценарий, который должен помочь Вам.

Уход, если у Вас есть только один элемент в последнем подсписке, я не знаю, как Вы хотите иметь дело с этим случаем. Я полагал, что элемент является результатом этого подсписка, но возможно Вы хотите проигнорировать последний подсписок или иметь 0 в результате.

Объяснения являются комментариями в сценарии:

# Initial list
l = [0, 10, 20, 5, 10, 30, 20, 35]

# Number of elements to consider in each sublist.
STEP = 3

# Get the size of the list
length = len(l)

# The result list, empty at the beginning, that will be populated by the differences
result_list = []

# Iterate through sublists of exactly STEP elements
i = 0
while (i+STEP-1)<length:
    result_list.append(l[i+STEP-1]-l[i])
    i += STEP

# Special case for the possible little last sublist
# No difference done and element is kept if there is only one element
if i==length-1:
    result_list.append(l[-1])
# Else, do the difference in the last sublist
elif i<length-1:
    result_list.append(l[-1]-l[i])
<час>

Вот сценарий, который берет max-min из каждого подсписка как OP, которую спрашивают, прежде всего:

l = [1,2,3,4,5,6,7,8]
n = 3

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

# Create the sublists
grouped_l = list(chunks(l,n))

# Do the max-min on each sublists
res = []
for i in grouped_l:
    res.append(max(i)-min(i))
-1
ответ дан txemsukr 7 September 2019 в 05:47
поделиться
  • 1
    Я рекомендовал django с тех пор it' s не другой клон направляющих и it' s лучше удовлетворенный для " enterprise" материал, чем направляющие/чаши Грааля. Jython 2.2 стабилен так 2.5 (it' s выход из последней беты). Я don' t видят, почему любой использовал бы 2.2, язык проделал длинный путь с тех пор. – Vasil 21 March 2009 в 18:05

Согласно просьбе в исходной версии вопроса, и согласно редактированиям, сделанным OP, мы создаем список увеличения последовательностей, затем вычисляем различия между макс. и минута каждого из них:

def spans(data):
    sequences = [[data[0]]]

    for val in data[1:]:
        if val >= sequences[-1][-1]:
            sequences[-1].append(val)
        else:
            sequences.append([val])

    return [s[-1] -s[0] for s in sequences]

Образец, выполненный с данными OP:

data = [0, 10, 20, 5, 10, 30, 20, 35]
print(spans(data))
# [20, 25, 15]

Другой:

print(spans([2, 4, 6, 8, 9, 4, 5, -2, -1, 5, 4]))
# [7, 1, 7, 0]
2
ответ дан Thierry Lathuille 7 September 2019 в 05:47
поделиться
  • 1
    Это звучит очень заманчивым, рассматривая, как далеко JRuby прибыл. Бесшовное использование Cucumber/RSpec звучит заманчивым также, но I' m испуганный JRuby не встретит " Java или менее экзотический JVM-language" критерий. Из любопытства: можно ли совместно использовать детали о JSP-Rails-Integration? – Nils Wloka 23 March 2009 в 23:00
Другие вопросы по тегам:

Похожие вопросы: