почему следующий элемент в списке исчезает после разделения на python - PullRequest
1 голос
/ 26 мая 2020

У меня есть список. Затем я хочу обнаружить любые «и» в списке, затем я должен разделить элементы между «и» и поместить их в новый список.

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

liss1=['a','b','c','d and e','f','g','h']

После разделения и удаления текущего элемента следующий элемент 'f' исчез из списка, как показано ниже:

item 0 a
item 1 b
item 2 c
item 3 d and e
item 4 g
item 5 h
Unique_liss ['a', 'b', 'c', 'd ', ' e', 'g', 'h']

Это мой код:

liss1=['a','b','c','d and e','f','g','h']
Unique_liss=[]
for i,item in enumerate(liss1):
    print('item',i,item)
    if 'and' in item:
        liss1.remove(item)
        split_elem_dan = item.split('and')
        for s in split_elem_dan:
            Unique_liss.append(s)
    else:
         Unique_liss.append(item)
print()
print('Unique_liss',Unique_liss)

Есть ли у кого-нибудь идеи, как улучшить? чтобы в списке остался следующий пункт

Ответы [ 4 ]

2 голосов
/ 26 мая 2020

Измените

for i,item in enumerate(liss1):

на

for i,item in enumerate(liss1.copy()):
1 голос
/ 26 мая 2020

Если вы хотите сделать это без перечисления, этот подход работает:

liss1=['a','b','c','d and e','f','g','h']
Unique_liss=[]

for item in liss1:
  for letter in [s for s in item.split('and')]:
    Unique_liss.append(letter.strip())


print('Unique_liss',Unique_liss)
1 голос
/ 26 мая 2020

Попробуйте следующее:

lst = ['a','b','c','d and e','f','g','h']
res = []
for x in lst:
    if 'and' in x:
        res += [y.strip() for y in x.split('and')]
    else:
        res.append(x)
0 голосов
/ 26 мая 2020

Я изменил ваш код на этот

liss1 = ['a','b','c','d and e','f','g','h']
Unique_liss=[]
for i in range(len(liss1)-1):
    print('item',liss1[i])
    if 'and' in liss1[i]:
        split_elem_dan = liss1[i].split(' and ')
        for s in split_elem_dan:
            Unique_liss.append(s)
    else:
         Unique_liss.append(liss1[i])
print('\nUnique_liss : ',Unique_liss)

, и результат

item a
item b
item c
item d and e
item f
item g

Unique_liss :  ['a', 'b', 'c', 'd', 'e', 'f', 'g']
...