【问题标题】:Subarray from lists of strings来自字符串列表的子数组
【发布时间】:2014-12-20 14:32:32
【问题描述】:

我只是想在两个列表中提取它们等于某个字符串的索引。

说:

a = ['foo' for _ in range(5)]
a.extend(['bar' for _ in range(5)])  
print(a)
['foo', 'foo', 'foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'bar', 'bar']
b = ['foo' for _ in range(3)]
b.extend(['bar' for _ in range(7)])
print(b)
['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar']

然后我只想要列表 a 中带有 'foo' 和列表 b 中带有 'bar' 的所有索引,这应该是 [3, 4]

index = (a == 'foo') & (b == 'bar')

不像处理 numpy 数组那样工作。我该如何进行这项工作? 多谢!! ???

【问题讨论】:

标签: python list python-3.x


【解决方案1】:

enumerate函数迭代,过滤掉所有foo的元素,只得到它们的索引,像这样

>>> [index for index, item in enumerate(a) if item == "foo"]
[0, 1, 2, 3, 4]

编辑后,问题发生了巨大变化。但是这个解决方案会起作用

>>> a = ['foo', 'foo', 'foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'bar', 'bar']
>>> b = ['foo', 'foo', 'foo', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar', 'bar']
>>> [idx for idx, values in enumerate(zip(a, b)) if values == ("foo", "bar")]
[3, 4]

【讨论】:

  • 啊,我明白了,这确实有效。 ? 但是,不幸的是,我的实现稍微复杂一些。实际上,我有两个长度相同的不同列表,我需要找到索引,其中列表 a 匹配,例如“foo”,而列表 b 匹配“bar”。我会更新我的问题,但到目前为止谢谢!
  • 完美运行,谢谢!我现在发现的另一种方法是将列表转换为 numpy 数组。然后索引按我最初的想法工作。
猜你喜欢
  • 2019-03-09
  • 2019-04-14
  • 1970-01-01
  • 1970-01-01
  • 2019-05-19
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
相关资源
最近更新 更多