检查随机生成的数组中是否存在值

时间:2019-04-05 19:56:10

标签: python arrays list

一个数组是由固定代码随机生成的,我们必须根据该代码进行工作。我需要检查数组中是否存在特定值。

我尝试了这两种解决方案,但这些方法均无效:

if a[5][0] in a
if a[5][0] != ""

我提供了数组的示例

[['Stack 5', 'Suit C', 9, 0],
  ['Stack 4', 'Suit B', 6, 0],
  ['Stack 6', 'Suit B', 8, 0],
  ['Stack 3', 'Suit C', 3, 0],
  ['Stack 1', 'Suit C', 10, 0],
  ['Stack 2', 'Suit B', 4, 0]]

基本上,我需要检查数组中是否存在“ Stack X”,然后进行操作。有时,随机生成的数组可能会错过任何特定的堆栈,例如

[['Stack 5', 'Suit C', 9, 0],
 ['Stack 4', 'Suit B', 6, 0],
 ['Stack 6', 'Suit B', 8, 0],
 ['Stack 3', 'Suit C', 3, 0],
 ['Stack 2', 'Suit B', 4, 0]]

在这种情况下不会生成堆栈1,我需要检查它是否已生成。它基本上是一个数组中的一个数组。

编辑: 感谢您的帮助,但我使用了for循环解决了该问题。这是我使用的代码。

for i in range(len(a)):
    if a[i][0] == 'Stack 1':

5 个答案:

答案 0 :(得分:1)

类似的事情会起作用:

def a_contains(num):
    for item in a:
        if 'Stack {}'.format(num) in item:
            return True
    return False

答案 1 :(得分:1)

没有内置语法。最好的选择可能是使用any并列出理解力

In [8]: data = [['Stack 5', 'Suit C', 9, 0], 
   ...:  ['Stack 4', 'Suit B', 6, 0], 
   ...:  ['Stack 6', 'Suit B', 8, 0], 
   ...:  ['Stack 3', 'Suit C', 3, 0], 
   ...:  ['Stack 2', 'Suit B', 4, 0]]                                                                       

In [9]: any(l[0] == 'Stack 1' for l in data)                                                                
Out[9]: False

In [10]: any(l[0] == 'Stack 3' for l in data)                                                               
Out[10]: True

答案 2 :(得分:0)

如果您想将它们扔进numpy数组中,可以切片第一列并以这种方式运行检查:

import numpy
data = numpy.array([['Stack 5', 'Suit C', 9, 0],
  ['Stack 4', 'Suit B', 6, 0],
  ['Stack 6', 'Suit B', 8, 0],
  ['Stack 3', 'Suit C', 3, 0],
  ['Stack 1', 'Suit C', 10, 0],
  ['Stack 2', 'Suit B', 4, 0]])

if 'Stack 6' in data[:, 0]: # index all rows, and only first column
    print('yes')
if 'Stack 18' in data[:, 0]:
    print('found')
else:
    print('nope')

输出:

yes
nope

另外print(data[:, 0])会产生:

['Stack 5' 'Stack 4' 'Stack 6' 'Stack 3' 'Stack 1' 'Stack 2']

认为,在numpy数组中使用切片比遍历列表要快,但我没有亲自对其进行计时

答案 3 :(得分:0)

对于循环,每次检查每个子数组中是否存在所请求的值。

检查下面的代码。

data = [['Stack 5', 'Suit C', 9, 0],
  ['Stack 4', 'Suit B', 6, 0],
  ['Stack 6', 'Suit B', 8, 0],
  ['Stack 3', 'Suit C', 3, 0],
  ['Stack 1', 'Suit C', 10, 0],
  ['Stack 2', 'Suit B', 4, 0]]

req = "Stack 8"
ans = ""
for l in data:
  if req in l:
    ans = "yes"
    break
  else:
    ans = "no"

print(ans)

答案 4 :(得分:0)

尝试一下

yourList = [['Stack 5', 'Suit C', 9, 0],['Stack 4', 'Suit B', 6, 0], ['Stack 6', 'Suit B', 8, 0], ['Stack 3', 'Suit C', 3, 0], ['Stack 1', 'Suit C', 10, 0], ['Stack 2', 'Suit B', 4, 0]]
filteredList = list(filter(lambda x: 'Stack 1' in x, yourList))
if (len(filteredList) > 0):
    #your code