Skip to main content
 首页 » 编程设计

python之列表理解产生结果加上乱码

2025年05月04日15mayingbao

我已经为此苦苦挣扎了几个小时。我想要做的是生成一个列表,其中包含后面带有“dB”的数字(即 0dB、1dB、2dB...高达 8dB)。这是为了让我不必为正在制作的情节手动输入每个标签。

我首先尝试的是:

 cb.ax.set_yticklabels([x + 'dB' for x in str(np.arange(0, 9))]) 

但是,这似乎完全弄乱了我的标签。因此,我采用了一种更长的方法来准确地了解这种理解产生了什么:

crange = np.arange(0,9) 
crangedb = [x + 'dB' for x in str(crange)] 
print crange 
print crangedb 

输出:

[0 1 2 3 4 5 6 7 8] 
 
['[dB', '0dB', ' dB', '1dB', ' dB', '2dB', ' dB', '3dB', ' dB', '4dB', ' dB', '5dB', ' dB', '6dB', ' dB', '7dB', ' dB', '8dB', ']dB'] 

因此,虽然我的数字列表很好(正如预期的那样),但一旦我尝试使用列表理解将 dB 附加到每个数字,每个值都散布着空白值或括号。从我用 Google 搜索过的每个页面来看,我的语法似乎都是正确的,所以我一定是遗漏了一些非常简单或非常小的东西。

请您参考如下方法:

您正在将 np.arange 转换为基本上是 "[1 2 3 4...]" 的字符串,然后迭代每个字符。这意味着 x=['[','0',' ',...]。正确的行应该是:

cb.ax.set_yticklabels([str(x) + 'dB' for x in np.arange(0, 9)]) 

现在您正在将 np.ndarray 的每个项目映射到一个字符串,并将其与 'dB' 连接起来。