为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中有效地交换列表元素

在 Python 中有效地交换列表元素

牧羊人nacy 2021-08-11 22:48:25
我有一个 Python 列表如下:-l=['EUR/USD', 'USD/JPY', 'GBP/USD', 'USD/CAD', 'AUD/USD', 'NZD/USD', 'USD/CHF', 'USD/NOK', 'USD/SEK']我希望基础货币是美元。这意味着 的第一个元素l将是USD/EUR。以下代码有效,但我想知道是否有更好的方法。l2=[]for x in range(len(l)):    l2.append(l[x].split('/'))k=pd.DataFrame(l2)for i in range(len(k)):    if k.iloc[i,0]=='USD':        print("base currency is USD")    else:        print("Base currency is not USD. Making it base currency")        temp=k.iloc[i,0]        k.iloc[i,0]='USD'        k.iloc[i,1]=temp
查看完整描述

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)


查看完整回答
反对 回复 2021-08-11
?
jeck猫

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']

作为一般提示,在像瘟疫一样迭代时避免使用显式索引。通常有比使用整数索引数据结构更易读的解决方案(当然,并非总是如此)。


查看完整回答
反对 回复 2021-08-11
?
慕容森

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']


查看完整回答
反对 回复 2021-08-11
  • 3 回答
  • 0 关注
  • 206 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信