Mam w ten sposób zagnieżdżoną listę:

lst =[['Start двигаться', 'другая сторона света', 'надолго скоро'],
      ['Start двигаться', 'другая сторона света', 'чтобы посмотреть'],
      ['Start двигаться', 'новая планета'],
      ['Start двигаться', 'сторона признание', 'суверенитет израильский'],
      ['Start двигаться', 'сторона признание', 'высот', 'на'],
      ['Start двигаться', 'сторона признание', 'высот', 'оккупировать'],
      ['Start двигаться', 'сторона признание', 'высот', 'Голанский'],
      ['Start двигаться', 'сторона признание', 'и']]

Muszę sprawdzić, czy ostatni element jest pojedynczym słowem, a jeśli jest to, skoncentruj go z poprzednim elementem. Pożądane wyjście:

    [['Start двигаться', 'другая сторона света', 'надолго скоро'], 
     ['Start двигаться', 'другая сторона света', 'чтобы посмотреть'],
     ['Start двигаться', 'новая планета'],
     ['Start двигаться', 'сторона признание', 'суверенитет израильский'],
     ['Start двигаться', 'сторона признание', 'высот на'],
     ['Start двигаться', 'сторона признание', 'высот оккупировать'],
     ['Start двигаться', 'сторона признание', 'высот Голанский'],
     ['Start двигаться', 'сторона признание и']]

Do tej pory pomyślałem o sprawdzaniu ostatniego elementu na białe znaki:

for i in lst:
    for j in i:
        if " " not in j[-1]:
            do smth

Ale nie jestem pewien, że to właściwy sposób. Każda pomoc byłaby doceniana!

1
Alex Nikitin 5 czerwiec 2018, 09:09

3 odpowiedzi

Najlepsza odpowiedź

Jesteś na właściwym miejscu, ale nie potrzebujesz drugiej pętli:

for sublist in lst:
    if ' ' not in sublist[-1]:
        # merge the last two elements
        text = '{} {}'.format(sublist[-2], sublist.pop())
        sublist[-1] = text

# result:
# [['Start двигаться', 'другая сторона света', 'надолго скоро'],
#  ['Start двигаться', 'другая сторона света', 'чтобы посмотреть'],
#  ['Start двигаться', 'новая планета'],
#  ['Start двигаться', 'сторона признание', 'суверенитет израильский'],
#  ['Start двигаться', 'сторона признание', 'высот на'],
#  ['Start двигаться', 'сторона признание', 'высот оккупировать'],
#  ['Start двигаться', 'сторона признание', 'высот Голанский'],
#  ['Start двигаться', 'сторона признание и']]
2
Aran-Fey 5 czerwiec 2018, 06:27

Jednym ze sposobów może spróbować z list comprehension jak poniżej:

[item[:-2]+ [' '.join(item[-2:])] 
                          if len(item[-1].split()) == 1 else item for item in lst ]

Szuka ostatniej pozycji na liście wewnętrznej, połączenia split i sprawdza długość. Jeśli długość wynosi 1, to przenosi resztę elementu, z wyjątkiem ostatnich 2 i dołączy do listy.

0
student 5 czerwiec 2018, 06:24

Możesz użyć funkcji Split, aby sprawdzić, czy jedno słowo lub nie. Jeśli korzystasz z funkcji Split, możesz nawet sprawdzić, czy istnieje ciąg z zakładkami (T).

for ele in lst:
    if len(ele[-1].split())==1:
        new = ele[-2]+" "+ele[-1]
        del ele[-2:]
        ele.append(new)
1
Murali 5 czerwiec 2018, 06:41