字符串列表的索引数组

时间:2018-02-28 10:03:05

标签: python

我有一个字符串“列表”,我需要获得列表中所有元素的索引数组,这些元素与模式相同。

我不需要使用python列表,我可以使用其他数据结构,但我不知道哪个。

示例:

my_list = ['foo', 'bar', 'hello', 'foo', 'goodbye']
pattern = 'foo'

我想要的结果是:

my_mask = [True, False, False, True, False]

所以我可以用这个掩码索引一个numpy数组:

selected_items = my_array[my_mask]

然而,有一个列表并做:

my_list == pattern

不返回掩码,只是假。

4 个答案:

答案 0 :(得分:2)

以下是$var = Get-Content -Path C:\testfiles\1.txt $var.Substring(20,10) 解决方案:

numpy

答案 1 :(得分:1)

你必须自己进行循环,Python容器不支持向量化操作,所以类似于:

[x == pattern for x in my_list]

答案 2 :(得分:0)

您可以使用列表理解来获取所需的列表:

>>> my_list = ['foo', 'bar', 'hello', 'foo', 'goodbye']
>>> pattern = 'foo'

>>> [item==pattern for item in my_list]
[True, False, False, True, False]

这里我在my_list列表上进行迭代,并用pattern检查每个元素的相等性,并将结果(True / False)存储在通过List Comprehension创建的新列表中。

答案 3 :(得分:0)

您可以使用它来创建所需的列表:

mask = [x==pattern for x in my_list]

创建

[True, False, False, True, False]

或者您可以使用numpy数组,它支持==运算符,就像您希望将它用于列表一样:

my_list = np.array(my_list)
my_list == pattern
>>>array([ True, False, False,  True, False])

但是如果你想要一个索引列表,那么你可以这样做:

[i for i,x in enumerate(my_list) if x==pattern]
>>>[0, 3]

enumerate会从您的列表中创建(index, element_at_index)元组。在代码中i是索引,x是该索引处的元素。如果elment eqauls模式

,我们现在在新列表中保存索引i