Python сгладить список, соединенный строкой - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть список списков, которые я хочу сгладить при вставке элемента между ними. Мой первоначальный список имеет вид:

l = [["a","b"],["c"],["d"]]

Что я хочу, чтобы выровнять список и разделить его символом

n = ["a","b",".","c",".","d"]

Уплощение списков должно быть возможным при понимании списка как уже упоминалось во многих SO ответах :

flat_list = [item for sublist in l for item in sublist]

, но возможно ли сгладить список с помощью символа / строки по моему выбору?

Это можно сделать с помощью добавив . к каждому списку, кроме последнего. Но есть ли что-нибудь более элегантное, как .join?

Ответы [ 2 ]

5 голосов
/ 23 апреля 2020

Один из способов, который я могу придумать, - это расширить sublist на втором уровне итерации, добавив разделитель:

[j for i in l for j in [*i, '.']][:-1]
# ['a', 'b', '.', 'c', '.', 'd']
1 голос
/ 23 апреля 2020

Как указал @Kurtis, используйте это, только если у вас есть символы в списках.

mylist = [["a", "b"], ["c"], ["d"]]

print(list(".".join(map("".join, mylist))))

# ['a', 'b', '.', 'c', '.', 'd']

ОБНОВЛЕНИЕ:

Есть несколько способов сделать это, я упомяну несколько .

Для данного mylist

mylist = [["asd", "b"], ["csd"], ["d"]]

Метод 1: Использование reduce

from functools import reduce
print(reduce(lambda a, b: a+["."]+b, mylist))

Метод 2:

print([item for sublist in mylist for item in sublist+["."]][:-1])

Метод 3: То же, что и метод 2

flat_list = []
[flat_list.extend(sublist + ["."]) for sublist in mylist][:-1]
print(flat_list)

Метод 4: Если вы можете позволить себе два разделителя, тогда разделите их с другим

print("~.~".join(map("~".join, mylist)).split("~"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...