Python 如何将向量之类的单词列表相乘?
我有这样的单词列表(这里只列出了2个): 我希望将这两个列表相乘,得到以下答案:Python 如何将向量之类的单词列表相乘?,python,list,numpy,Python,List,Numpy,我有这样的单词列表(这里只列出了2个): 我希望将这两个列表相乘,得到以下答案: obj[l1] * obj[l2] = ['average fiddle', 'average frolic', 'reasonable fiddle', 'reasnable frolic'] obj[l1] * obj[l2] *...* obj[n] 我写了这段代码: import numpy as np obj = {} obj['l1'] = np.array(list_1) obj['l2'] = n
obj[l1] * obj[l2] = ['average fiddle', 'average frolic', 'reasonable fiddle', 'reasnable frolic']
obj[l1] * obj[l2] *...* obj[n]
我写了这段代码:
import numpy as np
obj = {}
obj['l1'] = np.array(list_1)
obj['l2'] = np.array(list_2)
print(obj['l1']*obj['l2'])
但这只会给我一个错误:
TypeError: ufunc 'multiply' did not contain a loop with signature matching types dtype('<U10') dtype('<U10') dtype('<U10')
但这只返回一个空集。有没有一种方法可以遍历“无限”列表?如果必须使用列表:
In [86]: list_1 = ['average', 'reasonable']
...: list_2 = ['fiddle', 'frolic']
In [87]: arr1 = np.array(list_1, object)
In [88]: arr2 = np.array(list_2, object)
In [89]: np.add.outer(arr1, arr2)
Out[89]:
array([['averagefiddle', 'averagefrolic'],
['reasonablefiddle', 'reasonablefrolic']], dtype=object)
通过创建对象数组,而不是字符串数据类型,我强制add
ufunc使用Python字符串的+
方法。正如@Sandeep的回答所示,字符串加法是一种连接。字符串乘法是一种复制
使用第三个阵列:
In [90]: arr3 = np.array(['etc', 'etc'], object)
In [91]: np.add.outer(np.add.outer(arr1, arr2),arr3)
Out[91]:
array([[['averagefiddleetc', 'averagefiddleetc'],
['averagefrolicetc', 'averagefrolicetc']],
[['reasonablefiddleetc', 'reasonablefiddleetc'],
['reasonablefrolicetc', 'reasonablefrolicetc']]], dtype=object)
我在猜测你所说的连锁经营是什么意思
就我个人而言,我更喜欢@vash的itertools解决方案numpy
不会给Python的字符串处理增加太多内容
In [105]: [' '.join(x) for x in itertools.product(arr1,arr2,arr3)]
Out[105]:
['average fiddle etc',
'average fiddle etc',
'average frolic etc',
'average frolic etc',
'reasonable fiddle etc',
'reasonable fiddle etc',
'reasonable frolic etc',
'reasonable frolic etc']
如果必须使用列表执行此操作:
In [86]: list_1 = ['average', 'reasonable']
...: list_2 = ['fiddle', 'frolic']
In [87]: arr1 = np.array(list_1, object)
In [88]: arr2 = np.array(list_2, object)
In [89]: np.add.outer(arr1, arr2)
Out[89]:
array([['averagefiddle', 'averagefrolic'],
['reasonablefiddle', 'reasonablefrolic']], dtype=object)
通过创建对象数组,而不是字符串数据类型,我强制add
ufunc使用Python字符串的+
方法。正如@Sandeep的回答所示,字符串加法是一种连接。字符串乘法是一种复制
使用第三个阵列:
In [90]: arr3 = np.array(['etc', 'etc'], object)
In [91]: np.add.outer(np.add.outer(arr1, arr2),arr3)
Out[91]:
array([[['averagefiddleetc', 'averagefiddleetc'],
['averagefrolicetc', 'averagefrolicetc']],
[['reasonablefiddleetc', 'reasonablefiddleetc'],
['reasonablefrolicetc', 'reasonablefrolicetc']]], dtype=object)
我在猜测你所说的连锁经营是什么意思
就我个人而言,我更喜欢@vash的itertools解决方案numpy
不会给Python的字符串处理增加太多内容
In [105]: [' '.join(x) for x in itertools.product(arr1,arr2,arr3)]
Out[105]:
['average fiddle etc',
'average fiddle etc',
'average frolic etc',
'average frolic etc',
'reasonable fiddle etc',
'reasonable fiddle etc',
'reasonable frolic etc',
'reasonable frolic etc']
使用itertools.product,我们可以将它们作为元组
获得,然后使用'.join
创建str
from itertools import product
list_1 = ['average', 'reasonable']
list_2 = ['fiddle', 'frolic']
list_n = ['etc', 'vash']
a = [(x, y, z) for x, y, z in product(list_1, list_2, list_n)]
a = list(map(' '.join, a))
# ['average fiddle etc', 'average fiddle vash', 'average frolic etc', 'average frolic vash', 'reasonable fiddle etc', 'reasonable fiddle vash', 'reasonable frolic etc', 'reasonable frolic vash']
使用itertools.product,我们可以将它们作为元组
获得,然后使用'.join
创建str
from itertools import product
list_1 = ['average', 'reasonable']
list_2 = ['fiddle', 'frolic']
list_n = ['etc', 'vash']
a = [(x, y, z) for x, y, z in product(list_1, list_2, list_n)]
a = list(map(' '.join, a))
# ['average fiddle etc', 'average fiddle vash', 'average frolic etc', 'average frolic vash', 'reasonable fiddle etc', 'reasonable fiddle vash', 'reasonable frolic etc', 'reasonable frolic vash']
我将让您了解如何添加空格:)通常我们使用
join
在字符串之间获得空格<代码>''。加入(['one','two'])。您不能使用'one'+'two'
或'one'*2
来获得空格。感谢您的评论,我喜欢您使用的列表理解行,请记住,我将让您了解如何添加空格:)通常我们使用连接来获得字符串之间的空格<代码>''。加入(['one','two'])
。您不能用'one'+'two'
或'one'*2
获得空格。感谢您的评论,我喜欢您在列表中使用的理解行,请记住这不是numpy数组乘法元素明智吗?numpy数组乘法元素明智吗?