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

标签 python list vectorization

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

最佳答案

我会这样写,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']

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

这是一个很酷的视频:Loop like a native: while, for, iterators, generators

关于python - 在 Python 中有效地交换列表元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53220772/

相关文章:

python - 内存泄漏/Python windows 7 截图

list - 如何在 Prolog 中将无序集划分为子集

Java:在不实例化新列表的情况下深度复制列表条目

performance - 在 MATLAB 中使用矢量-标量乘法进行真正的慢循环

matlab - 在 Matlab/Python 中向量化多个 for 循环

python - 图像中文本的边界框

python - 子字符串 SQL 查询变量

python - 使用未声明的标识符 'NUMPY_IMPORT_ARRAY_RETVAL' 返回 NUMPY_IMPORT_ARRAY_RETVAL;

python - 使用分隔符将两个列表元素组合在一起

python - "Unsparsing"具有给定掩码的 numpy 数组