Объединение элементов списка с символом - PullRequest
1 голос
/ 08 июля 2019

Предположим, у меня есть следующий список:

f=[('soybean', 'vegetable_oil'), ('bay', 'smoke'), ('gelatin', 'watermelon')]

Я хочу присоединиться к каждому элементу таким образом, чтобы получить

['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']

Для этого я делаю следующее:

list=[]
for i in f:
    s=':'
    list=s.join(f)
    print(list)

Но, таким образом, возвращает:

TypeError: sequence item 0: expected string, tuple found

Я также понял, что есть аналогичный вопрос здесь , но когда я делаю

':'.join(str(d) for d in f)

, я получаю:

"('soybean', 'vegetable_oil'):('bay', 'smoke'):('gelatin', 'watermelon')"

это не то, что мне нужно, интересно, что я здесь не так делаю?

Ответы [ 5 ]

4 голосов
/ 08 июля 2019

Попробуйте использовать форматирование f-строки со списком, если используете Python 3.6 +:

[f'{i}:{j}' for i, j in f]

выход

['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
2 голосов
/ 08 июля 2019

Простой способ - использовать map с list.join:

list(map(':'.join, f))
# ['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
2 голосов
/ 08 июля 2019

':'.join(str(d) for d in f) объединяет элементы списка, а не внутренние кортежи.

Используйте следующее понимание списка:

[':'.join(x) for x in f]

Пример

f = [('soybean', 'vegetable_oil'), ('bay', 'smoke'), ('gelatin', 'watermelon')]

print([':'.join(x) for x in f])
# ['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
1 голос
/ 08 июля 2019

Когда вы используете цикл for в списке, вы перебираете каждый элемент списка, который в данном случае является кортежем.Это означает, что вы просматриваете список, а не внутренние кортежи.

Скажем, у вас есть этот список: [(0, 0), (2, 4), (-3, 9)]

Когда вы подаете заявку на цикл в списке, вы каждый раз получаете элемент кортежа.

Чтобы получить требуемый результат, как указано в вопросе, вы можете использовать следующий код:

for element in my_list:
    my_list.insert(my_list.index(element), ":".join(element))
        my_list.remove(element)

Надеюсь, это помогло вам!

1 голос
/ 08 июля 2019

Попробуйте этот список понимания:

>>> f=[('soybean', 'vegetable_oil'), ('bay', 'smoke'), ('gelatin', 'watermelon')]
>>> [':'.join(k) for k in f]
['soybean:vegetable_oil', 'bay:smoke', 'gelatin:watermelon']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...