如何正确使用Python标量?

2024-06-17 09:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

>>> numpy.sin(range(11))
array([ 0.        ,  0.84147098,  0.90929743,  0.14112001, -0.7568025
   -0.95892427, -0.2794155 ,  0.6569866 ,  0.98935825,  0.4121184
   -0.54402111])
>>> numpy.array(range(11))*2
array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18, 20]) 
>>> str(numpy.array(range(11))... )
'[ 0  1  2  3  4  5  6  7  8  9 10]'

如何使用python标量的概念来获取['0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'10'numpy.sin公司(范围(11))或numpy.数组(范围(11))*2?你知道吗

我可以通过以下方法做到:

>>> s=[]
>>> [s.append(str(i)) for i in range(11)]
>>> s
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

>>> str(numpy.array(range(11)))
'[ 0  1  2  3  4  5  6  7  8  9 10]'

我想要的是['0'、'1'、'2'、'3'、'4'、'5'、'6'、'7'、'8'、'9'、'10'],而不是'[0 1 2 3 4 5 6 7 8 9 10]'。你知道吗

它用列表理解的概念来获取字符串数组,如何用这个概念来完成工作——python标量?你知道吗


Tags: 方法字符串innumpy概念列表for公司
3条回答

你的术语有点混乱。你知道吗

Python没有标量。它的基本对象是数字、字符串和列表。列表可以是字符串列表、数字列表或混合列表。你知道吗

numpyPython的基础上添加多维数组的概念。通常这些数组的元素是数字。numpy数组可以包含单个数字(具有0维)。Numpy文档通过将“普通”Python编号称为“标量”来区分这样的数组和“普通”Python编号。你知道吗

但你真正想问的是一种显示numpy数组的方法。你知道吗

In [156]: a=np.arange(10)   # a numpy array of integers

In [157]: str(a)
Out[157]: '[0 1 2 3 4 5 6 7 8 9]'  # a string representation of that array

In [158]: a.tolist()
Out[158]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  # a list of numbers

In [159]: str(a.tolist())
Out[159]: '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]'  # a string representation of that list

In [160]: [str(i) for i in a]
Out[160]: ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] # a list of strings

In [161]: ', '.join(_)
Out[161]: '0, 1, 2, 3, 4, 5, 6, 7, 8, 9'  # join the strings into one

In [169]: a.astype(str)
Out[169]:  array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], dtype='|S24')
# an array of strings

不要混淆数组(或任何Python对象)的显示方式(转换为字符串)和数组的性质。在处理数组或列表等复合对象时,表示对象整体的方式和表示对象元素的方式是有区别的。你知道吗


在你的例子中

>>> s=[]
>>> [s.append(str(i)) for i in range(11)]

你不需要附加。你知道吗

s = [str(i) for i in range(11)]

自动生成列表。事实上,列表理解是以下内容的一个紧凑而快速的版本:

s = []
for i in range(11):
    s.append(str(i))

map也可以,但是Python开发人员鼓励我们使用理解。你知道吗

这就是你要找的吗?你知道吗

#Python2
map(str, range(11))

#Python3
list(map(str, range(11)))

我想这就是你想要的:

>>> a = numpy.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> a.astype(str)
array(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], 
      dtype='|S21')

相关问题 更多 >