带状链可迭代

时间:2018-12-25 03:44:04

标签: python

是否可以在不借助列表理解的情况下剥离下面的可迭代项?

>>> values=f.df['AvailableInTerritories'].tolist()
>>> values
['AU, CA,GB,US', 'AU, CA, GB, US', 'AU, AT, CA, GB, US', 'AU, CA, GB, US', 'AU, CA, GB, US']
>>> list_separator=','

>>> [item.strip() for item in itertools.chain.from_iterable((str(_val).split(list_separator) for _val in values))]
['AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'AT', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US']

3 个答案:

答案 0 :(得分:2)

list_separator更改为', ',因此您无需使用strip()

list_separator = ', '

然后使用:

>>> list(itertools.chain.from_iterable((str(_val).split(list_separator) for _val in values)))
['AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'AT', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US']

我认为您对非列表理解版本感兴趣。您可以这样做:

values = ['AU, CA, GB, US', 'AU, CA, GB, US', 'AU, AT, CA, GB, US', 'AU, CA, GB, US', 'AU, CA, GB, US']
list_separator = ', '

lst = []
for x in values:
    lst.extend(x.split(list_separator))

print(lst)
# ['AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'AT', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US']

答案 1 :(得分:1)

您实际上不需要itertools.chain,还有另一种更简洁有效的解决方案:

print([x for i in values for x in i.split(', ')])

输出:

['AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'AT', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US']

答案 2 :(得分:1)

使用re.split

的一种方法
import re
print (re.split(',\s*', ','.join(values)))
#['AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'AT', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US', 'AU', 'CA', 'GB', 'US']