3 回答
TA贡献1853条经验 获得超9个赞
定义一个函数来反转对,然后使用 map
In [759]: def usd_base(ccy):
...: delimiter = '/'
...: base, term = ccy.split(delimiter)
...: if base != 'USD' and term == 'USD':
...: return delimiter.join((term, base))
...: return ccy
...:
In [760]: list(map(usd_base, l))
Out[760]:
['USD/EUR',
'USD/JPY',
'USD/GBP',
'USD/CAD',
'USD/AUD',
'USD/NZD',
'USD/CHF',
'USD/NOK',
'USD/SEK']
如果您还没有使用 a DataFrame,则可能没有理由为此目的list而为该大小创建一个
对于 Python 2,您可以使用
map(usd_base, l)
TA贡献1909条经验 获得超7个赞
我会这样写,IMO 更具可读性。
>>> l=['EUR/USD', 'USD/JPY', 'GBP/USD', 'USD/CAD', 'AUD/USD', 'NZD/USD', 'USD/CHF', 'USD/NOK', 'USD/SEK']
>>>
>>> result = []
>>> delim = '/'
>>> for currencies in l:
...: first, second = currencies.split(delim)
...: if first == 'USD':
...: result.append(currencies)
...: else:
...: result.append(delim.join((second, first)))
...:
>>> result
>>>
['USD/EUR',
'USD/JPY',
'USD/GBP',
'USD/CAD',
'USD/AUD',
'USD/NZD',
'USD/CHF',
'USD/NOK',
'USD/SEK']
作为一般提示,在像瘟疫一样迭代时避免使用显式索引。通常有比使用整数索引数据结构更易读的解决方案(当然,并非总是如此)。
TA贡献1853条经验 获得超18个赞
您可以使用endswith+ split+存档join
['/'.join(i.split('/')[::-1]) if i.endswith('USD') else i for i in l]
结果
['USD/EUR',
'USD/JPY',
'USD/GBP',
'USD/CAD',
'USD/AUD',
'USD/NZD',
'USD/CHF',
'USD/NOK',
'USD/SEK']
添加回答
举报