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

我有一个 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


牧羊人nacy
浏览 207回答 3
3回答

暮色呼如

定义一个函数来反转对,然后使用 mapIn [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)

jeck猫

我会这样写,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']作为一般提示,在像瘟疫一样迭代时避免使用显式索引。通常有比使用整数索引数据结构更易读的解决方案(当然,并非总是如此)。

慕容森

您可以使用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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python