Извлечение даты из строки в многомерном массиве - PullRequest
0 голосов
/ 15 апреля 2020

Мне тяжело с домашней работой.

В принципе, у меня есть пользователь для ввода некоторых данных для x человек в 2Darray (имя, фамилия, идентификатор, зарплата). Идентификатор представляет собой строку из 13 чисел ddmmYYYY XXXXXX (x не имеет значения для этой части задачи). Мне нужно извлечь идентификаторы из каждого массива в списке и поместить их в отдельный массив (я сделал это), и сделать его допустимым форматом даты ( дд.мм.ГГГГ ). Как мне отредактировать строку таким образом?

вот мой код:

counter = 0
workersList = []
totalSalaries = 0
datesOfBirth = []

#1
workersNumber = int(input("How many? "))

#2
for i in range (workersNumber):
    workersList.append(input("Name, Last name, ID and salary ").split(" "))    
    datesOfBirth.append(workersList[i][2])

#3
    if len(workersList[i][2])==13:
        #print("Good ID number")
        totalSalaries = totalSalaries + float(workersList[i][3])


#4
        avgSalaries = totalSalaries/workersNumber
        counter+=1




#5
print("List of workers: ")
for j in range (workersNumber):
    print(workersList[j])
    print(datesOfBirth)


#6


#7


#8

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

Ответы [ 2 ]

3 голосов
/ 15 апреля 2020

Разрезание + форматирование - довольно простой способ:

worker_data = [
    input("Name, Last name, ID and salary ").split()
    for _ in range(int(input("How many? ")))
]
worker_dobs = [
    f"{id[0:2]}.{id[2:4]}.{id[4:8]}"
    for [_first, _last, id, _salary] in worker_data
]

Это предполагает, что данные верны; если вам нужно обработать недопустимые данные, я бы предложил заменить input("Name, Last name, ID and salary ").split() на функцию, которая выполняет соответствующую проверку, чтобы отсеять ее до того, как она попадет в список worker_data.

Как только вы получите список данных, из него легко получить другие полезные значения; вам не нужно делать это, когда вы строите список. Например:

from statistics import mean

average_salary = mean(
    float(salary)
    for [_first, _last, _id, salary] in worker_data
)
number_workers = len(worker_data)

et c.

1 голос
/ 15 апреля 2020

Это очень просто, просто замените строку в шаге # 2

datesOfBirth.append(workersList[i][2])

на

datesOfBirth.append('.'.join([workersList[i][2][0:2],
                              workersList[i][2][2:4],
                              workersList[i][2][4:8]]))

'. ' - ваш разделитель, а мы нарезаем элементы

ddmmyyyy
[0: 2] [2: 4] [4: 8]

...