Разделение чисел с плавающей запятой, целых, негативов и строк, содержащих буквы, цифры и. В python - PullRequest
0 голосов
/ 10 февраля 2020

В настоящее время у меня есть список строк, по которым я перебираю ..

string1 = 'CRUC1AL 34 6 5 0 23 75.6 11 89.6 3 1.39 robiin 40 15 8 2 26 78.0 14 89.5 4 1.36 Surreal 31 14 6 2 25 68.3 6 79.8 2 1.17 MiGHTYMAX 24 8 7 2 26 78.0 -2 57.5 -2 1.02 Thomas 25 17 10 3 28 70.7 -3 77.8 -2 0.95'
string2 = 'Lucky 27 6 8 4 27 68.3 0 71.0 4 1.01 kiR 27 18 6 0 36 58.5 -9 77.6 1 0.92 kwezz 29 11 6 2 32 53.7 -3 77.2 -1 0.91 scott 20 6 5 2 26 56.1 -6 50.0 -2 0.75 cleMeNz0 25 15 5 3 33 48.8 -8 71.9 -7 0.74'

Я заменяю все на "," на "", поэтому я могу перебирать их все. Теперь мне нужно иметь возможность поместить имена в 1 список и цифры. Имена содержат буквы, цифры, знаки пунктуации и тире.

player_names1 = []
player_names2 = []
team1_list = []
team2_list = []
for i in string1:
    if i.isalpha() or i.endswith('.') or i.isupper():
        player_names1.append(i)
    elif not i.isalpha() and not i.endswith('.') and not i.isupper():
        team1_list.append(i)

for i in string2:
    if i.isalpha() or i.endswith('.') or i.isupper():
        player_names2.append(i)
    elif not i.isalpha() and not i.endswith('.') and not i.isupper():
        team2_list.append(i)

Я рассмотрел использование функции индекса или поиска, но я не хочу делать новую, а не последовательность для моего операторы if, чтобы сделать это .. Этот способ работал, чтобы исправить одно имя с. в предыдущей строке и добавив CRUC1AL в список имен, но теперь есть один с 0 в конце, и он пытается добавить его в мой список статистики. Я также пытался ..

if not i.isdigit() and not i.startswith('-'):
    player_names1.append(i)
    print(i)
    #= CRUC1AL 75.6 89.6 1.39
else:
    team1_list.append(i)

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

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Ваши данные выглядят следующим образом:

[name] [int] [int] [int] [int] [int] [float] [int] [float] [int] [float]

Предполагая, что ваша цель состоит в разделении данных, то есть вы делаете это не просто изучите , мы можем воспользоваться этим шаблоном.

Как @ ab c Я решил использовать Pandas, я думаю, что это имеет смысл для такого рода данных, и это означает, что мы не необходимо вручную привести каждое значение к соответствующему типу.

import pandas as pd

team_1_str = 'CRUC1AL 34 6 5 0 23 75.6 11 89.6 3 1.39 robiin 40 15 8 2 26 78.0 14 89.5 4 1.36 Surreal 31 14 6 2 25 68.3 6 79.8 2 1.17 MiGHTYMAX 24 8 7 2 26 78.0 -2 57.5 -2 1.02 Thomas 25 17 10 3 28 70.7 -3 77.8 -2 0.95'
team_2_str = 'Lucky 27 6 8 4 27 68.3 0 71.0 4 1.01 kiR 27 18 6 0 36 58.5 -9 77.6 1 0.92 kwezz 29 11 6 2 32 53.7 -3 77.2 -1 0.91 scott 20 6 5 2 26 56.1 -6 50.0 -2 0.75 cleMeNz0 25 15 5 3 33 48.8 -8 71.9 -7 0.74'

team_1_split = team_1_str.split()
team_2_split = team_2_str.split()

team_1_data = (team_1_split[i:i + 11] for i in range(0, len(team_1_split), 11))
team_2_data = (team_2_split[i:i + 11] for i in range(0, len(team_2_split), 11))

df_1 = pd.DataFrame(data=team_1_data)
df_2 = pd.DataFrame(data=team_2_data)

print(df_1, end='\n\n')
print(df_2)

Вывод:

           0   1   2   3  4   5     6   7     8   9    10
0    CRUC1AL  34   6   5  0  23  75.6  11  89.6   3  1.39
1     robiin  40  15   8  2  26  78.0  14  89.5   4  1.36
2    Surreal  31  14   6  2  25  68.3   6  79.8   2  1.17
3  MiGHTYMAX  24   8   7  2  26  78.0  -2  57.5  -2  1.02
4     Thomas  25  17  10  3  28  70.7  -3  77.8  -2  0.95

          0   1   2  3  4   5     6   7     8   9    10
0     Lucky  27   6  8  4  27  68.3   0  71.0   4  1.01
1       kiR  27  18  6  0  36  58.5  -9  77.6   1  0.92
2     kwezz  29  11  6  2  32  53.7  -3  77.2  -1  0.91
3     scott  20   6  5  2  26  56.1  -6  50.0  -2  0.75
4  cleMeNz0  25  15  5  3  33  48.8  -8  71.9  -7  0.74
0 голосов
/ 10 февраля 2020

Вы можете разделить пробелы и добавить к соответствующему списку.

player_names1 = []
team1_list = []
for idx, el in  enumerate(string1.split()):
   if idx % 11 == 0:
      player_names1.append(el)
   else:
      team1_list.append(el)

Другим способом может быть построение кадра данных с результатами.

>>> pd.DataFrame(np.array(string1.split()).reshape(5,11))
           0   1   2   3  4   5     6   7     8   9    10
0    CRUC1AL  34   6   5  0  23  75.6  11  89.6   3  1.39
1     robiin  40  15   8  2  26  78.0  14  89.5   4  1.36
2    Surreal  31  14   6  2  25  68.3   6  79.8   2  1.17
3  MiGHTYMAX  24   8   7  2  26  78.0  -2  57.5  -2  1.02
4     Thomas  25  17  10  3  28  70.7  -3  77.8  -2  0.95
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...