Как я могу вставить условный оператор в список? - PullRequest
0 голосов
/ 05 июля 2018

У меня есть список lst, и я хочу разделить его элементы, если они являются числами. Таким образом, формат моего lst выглядит так:

lst=["1,2,3"," , , ","4,5,6"]

И у меня есть выражение, подобное приведенному ниже, но я хочу сделать int(i), если число не пустое. Как мне этого добиться? Заранее спасибо.

[[int(i) for i in c.split(',')] for c in lst]

Что мне нужно, это:

[1, 2, 3, " ", " ", " ", 4, 5, 6]

Ответы [ 3 ]

0 голосов
/ 05 июля 2018

понимание того, что нужно делать со всеми списками способ:

lst=["1,2,3", " , , ", "4,5,6"]

res = [int(x) if x!=' ' else x for y in lst for x in y.split(',')]
print(res)  # [1, 2, 3, ' ', ' ', ' ', 4, 5, 6]

old-school , петлевым способом:

lst=["1,2,3", " , , ", "4,5,6"]

res = []
for item in lst:
  if item[0].isdigit():
    res.extend(map(int, item.split(',')))
  else:
    res.extend(item.split(','))
print(res)  # [1, 2, 3, ' ', ' ', ' ', 4, 5, 6]

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

0 голосов
/ 05 июля 2018
lst=["1,2,3"," , , ","4,5,6"]
list2=[]

for c in lst:
    i=c.split(',')
    if c[0].isdigit():  
        list2.extend(map(int,i))
    else:
        list2.extend(i)

print(list2)

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

0 голосов
/ 05 июля 2018

Вы можете использовать str.replace(",", "").strip() в условии if, чтобы проверить, является ли он допустимым элементом. И вы также можете использовать list.extend для создания выходных данных.

Ex:

lst=["1,2,3"," , , ","4,5,6"]

res = []
for i in lst:
    if i.replace(",", "").strip():
        res.extend(map(int, i.split(",")))
    else:
        res.extend([""]*(i.count(",")+1))
print(res)

Выход:

[1, 2, 3, '', '', '', 4, 5, 6]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...