Слияние списка с другим списком python без петель - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть 2 серии панд, которые выглядят так:

import pandas as pd
listA = [5,4,3]
listB = ["a","b","c"]
s = pd.Series(listA)
print(s)
p = pd.Series(listB)
print(p)

И я хотел бы получить список из 2 списков, смешанных вместе в виде строк:

listTogether = ["a5","a4","a3","b5","b4","b3","c5","c4","c3"]
t = pd.Series(listTogether)
print(t)

У вас есть подсказка?Можно ли это сделать, избегая петель?

Большое спасибо заранее за помощь

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018

Вы зацикливаетесь, нравится вам это или нет.

[f'{b}{a}' for b in listB for a in listA]

['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']
0 голосов
/ 28 ноября 2018

Использование zip может вам помочь.

Вы можете сделать что-то подобное для своих списков, однако это включает цикл for:

listTogether = ['{}{}'.format(a,b) for (a,b) in zip(listA,listB)]
0 голосов
/ 28 ноября 2018

Вы можете использовать продукт itertools

from itertools import product

pd.DataFrame(list(product(p.tolist(),s.astype(str).tolist()))).apply(''.join, axis = 1).tolist()

839 µs ± 18.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']

Если вы хотите очень эффективное решение, идите чистым питоном

[''.join(i) for i in list(product(p.tolist(),s.astype(str).tolist()))]
79 µs ± 924 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
0 голосов
/ 28 ноября 2018

Трюк от MultiIndex

listTogether = pd.MultiIndex.from_product([p,s.astype(str)]).map(''.join).tolist()
listTogether 
Out[242]: ['a5', 'a4', 'a3', 'b5', 'b4', 'b3', 'c5', 'c4', 'c3']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...