一个数组是由固定代码随机生成的,我们必须根据该代码进行工作。我需要检查数组中是否存在特定值。
我尝试了这两种解决方案,但这些方法均无效:
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':
答案 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