是否可以在不借助列表理解的情况下剥离下面的可迭代项?
>>> 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']
答案 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']