Сокращение списка объектов только до цифр и создание нового списка в Python - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть список, в котором несколько сотен дат, но мне нужно отфильтровать только время в формате hhmmss (нет: между ними, чтобы позже я мог преобразовать их в int).

Пока что список, который у меня есть, выглядит следующим образом:

list_dates = ['Fri Nov 30 15:56:43 +0000 2018', 'Fri Nov 30 15:56:44 +0000 2018', 'Fri Nov 30 15:56:45 +0000 2018', 'Fri Nov 30 15:56:46 +0000 2018', ... ]

Мой подход пока таков:

raw_list = []
new_list = []

def ConversionStrings():

    j = 0
    while j < (len(list_dates)+1):

        for j in list_dates:

            raw_list.append((list_dates[j])[11:19])
            j += 1

    i = 0
    while i < len(raw_list):

        for i in raw_list:
            item = (raw_list[i]).replace(":", "")
            new_list.append(item)
            i += 1

Очевидно, что это не работает, но я не могу понять, кто яделаю не так, как я довольно плохо знаком с PythonЯ получаю ошибку, и это относится к j в цикле for

 TypeError: list indices must be integers or slices, not str

Как я могу изменить свой код, чтобы получить этот вывод?Или, может быть, есть более простой способ решить эту проблему?

 >>> new_list = [155643, 155644, 155645, ... ]

Ответы [ 4 ]

0 голосов
/ 04 декабря 2018

Вместо неясного

j = 0
while j < (len(list_dates)+1):

    for j in list_dates:

        raw_list.append((list_dates[j])[11:19])
        j += 1

используйте Pythonic (более простой, читаемый и более безопасный способ)

for item in list_dates:
    raw_list.append(item[11:19])

и то же самое для

i = 0
while i < len(raw_list):

    for i in raw_list:
        item = (raw_list[i]).replace(":", "")
        new_list.append(item)
        i += 1

т.е. замените его на

for item in raw_list:
    item = item.replace(":", "")
    new_list.append(item)
0 голосов
/ 04 декабря 2018

Ваша проблема с этим разделом кода:

j = 0
while j < (len(list_dates)+1):

    for j in list_dates:

        raw_list.append((list_dates[j])[11:19])
        j += 1

Каждый j в list_dates является элементом массива, а не индексом определенного элемента.Итак, когда вы пытаетесь получить j -й элемент list_dates с list_dates[j], вы передаете str в качестве индекса массива, что не имеет смысла.Вы должны просто использовать другой цикл while, как во внешнем цикле, или использовать for k in range(len(list_dates)) или что-то подобное.

0 голосов
/ 04 декабря 2018

с помощью модуля datetime вы можете сделать что-то вроде этого.Ссылка для дальнейшего чтения https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior

from datetime import datetime
[datetime.strftime(datetime.strptime(i,'%a %b %d %H:%M:%S +0000 %Y'),'%H%M%S') for i in list_dates]

Вывод:

['155643', '155644', '155645', '155646']

Если вам нужно преобразовать значения в int, приведите их в само понимание списка, чтобы получить списокзначения int

0 голосов
/ 04 декабря 2018

Вы можете использовать понимание списка :

list_dates = ['Fri Nov 30 15:56:43 +0000 2018', 'Fri Nov 30 15:56:44 +0000 2018', 'Fri Nov 30 15:56:45 +0000 2018', 'Fri Nov 30 15:56:46 +0000 2018']
result = [''.join(c for c in date.split()[3] if c.isnumeric())  for date in list_dates]
print(result)

Выход

['155643', '155644', '155645', '155646']

Если вы хотите, чтобы результат был целым числом, используйте int :

result = [int(''.join(c for c in date.split()[3] if c.isnumeric())) for date in list_dates]
print(result)

Выход

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