Как добавить элементы из одного списка в другой? - PullRequest
1 голос
/ 04 августа 2020

Возможно, этот вопрос не будет хорошо принят сообществом SO. Я 12-летний начинающий программист Python, и я работаю над этим проектом, чтобы собрать статистику Corona с нескольких веб-сайтов и сообщений GitHub. Затем я бы превратил это в график. Некоторые списки, которые были созданы, будут созданы одной страной, но в разных провинциях. Итак, что мне нужно сделать, так это добавить каждый элемент в списке к другому элементу в списке, чтобы у меня был только один список страны. Я добавил два или более списка в один список, который называется полным, и немного отформатировал его, и он выглядит примерно так:

['China', '  8', '  8', '  8', '  8', '  8', '  8', '  8', 
 'China', '  2', '  2', '  2', '  2', '  2', '  2', '  2', 
 'China', '  6', '  6', '  6', '  6', '  6', '  6', '  6', 
 'China', '  22', '  22', '  22', '  22', '  22', '  22', '  22']

Моя цель


Поэтому мне нужно добавить 8 к двум например, и поместите это в список:

Наглядная картина

Теперь это просто:

list1 = full[1]+full[3]

Но что, если мне нужно добавить несколько элементов в список друг к другу, а количество списков полностью (мой список) каждый раз разное ( это произошло, потому что в Китае могло быть 8 провинций, поэтому я создал 8 списков, в то время как в Индии 50 провинций, поэтому я создаю 50 списков).

Результат

Итак, вот что я хотел бы получить, но не могу понять.
['China', '8','7','2', 'China','2','34','18']
['India', '8','7','2', 'India','2','34','8','India','2','231','44']

China = ['10','41','20']
India = ['12','271','55']

Вот мой код:

file = open('similar.txt','r')
L = []
full = []
final = []
countryName = ''
numfinal = 0
for row in file:
    count = 1
    row = row[:-2]
    row = row[1:]
    L.append(row)
    for i in L:
        L = i.split(',')
    L = [i.replace('\n','')for i in L]
    L = [i.replace('\'','') for i in L]  

    if L[0] == countryName:
        for i in L:
            full.append(i)
        print(full)
    else:
        countryName = L[0]
        full.clear()

(Их больше, но эти файлы не имеют значения для моей проблемы. Также он считывается из файла, который включает все страны с более чем большим количеством Это слишком много для вставки, поэтому у меня есть завиток ниже) curl- O 'https://raw.githubusercontent.com/BuddyBob/Py_Programs/master/Hackathon/Deaths/similar.txt' Или просто воспользуйтесь ссылкой. Любая помощь будет принята с благодарностью

Вот пара строк из Similar.txt:

['Australia', ' 0', ' 0', ' 0', ' 0', ' 0', ' 0', ' 0']
['Australia', ' 4', ' 4', ' 4', ' 4', ' 4', ' 4', ' 4']
['Australia', ' 83', ' 92', ' 105', ' 112', ' 116', ' 123', ' 123']
['Canada', ' 7', ' 8', ' 8', ' 8', ' 8', ' 8', ' 8']
['Canada', ' 3', ' 3', ' 3', ' 3', ' 3', ' 3', ' 3']
['Canada', ' 2807', ' 2812', ' 2813', ' 2816', ' 2819', ' 2821', ' 2822']
['Canada', ' 5667', ' 5670', ' 5670', ' 5673', ' 5674', ' 5678', ' 5681']
['China', ' 1', ' 1', ' 1', ' 1', ' 1', ' 1', ' 1']
['China', ' 8', ' 8', ' 8', ' 8', ' 8', ' 8', ' 8']

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Вот иллюстрация одного способа группировки и суммирования данных. Определенно есть более короткие и изящные способы сделать такие вещи, но этот пример разбивает шаги вниз.

0 голосов
/ 04 августа 2020

Вы можете использовать itertools.groupby, чтобы получить сгруппированные числа, а для вашего ключа просто определите, является ли строка числом (я использовал str.isdigit).

Затем преобразуйте их в числа,

Наконец, выполните поэлементное суммирование результата (что можно сделать, используя map и operator.add).

Все это можно сделать в одной строке.

from itertools import groupby
from operator import add

data = ['China', '8','7','2', 'China','2','34','18']

china = list(map(add, *(tuple(map(int, g)) for k, g in groupby(data, str.isdigit) if k)))

Результат:

[10, 41, 20]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...