创建包含特定元素的数组列表
Create list of arrays that contain specific element
我需要创建一个函数来搜索某个字符串是否在数组中,并创建一个包含包含它的所有元素(列表)的列表。例如:
word = 'busy'
array = [[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']],[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]]
所以我的输出应该是:
[['99', 'Normal', [], ['busy', '0'], 362.01, 'working', '1']]
但我只得到表明该字符串不存在的验证,而它显然存在。这是代码:
array = [[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']],[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]]
def searchBusyWorkers(array):
busy = []
for x in array:
if 'busy' in x:
ind = x.index('busy')
busy.append(array[ind])
return busy
else:
return "No workers have that condition."
试试这个
word = 'busy'
array = [[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']],
[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]]
def searchBusyWorkers(array,word):
out = []
for a in array:
for i in a:
for x in i:
try:
if word in x:
out.append(i)
except TypeError:
if word == x:
out.append(i)
if out:
return out
return "No workers have that condition."
print(searchBusyWorkers(array,word))
输出
[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']]
'busy' in x
失败,因为“busy”嵌套更深一层。换句话说,没有 'busy' in x
但 x 中有一个包含字符串“busy”的 sub-array。
由于您提到 'busy' 将始终位于特定索引处,因此您需要解压缩以获取 sub-array 然后检查该索引 -
for x in array:
elements, *_ = x
if 'busy' in elements[3]:
print(x)
输出
[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']]
这应该有效
new_list = []
for i in range(len(array)):
for j in (array[i]):
if isinstance(j, list):
try:
for r in j:
if word in r:
new_list.append(array[i])
except:
...
if word in j or word in array[i]: #update
new_list.append(array[i])
print(*new_list) # Update
输出:
[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']]
我会这样做:
array = [[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']],[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]]
def searchforword(word, array):
return([y for x in array for y in x for i in y if word in str(i)])
结果:
word = 'busy'
print(searchforword(word, array))
[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']]
word = 'free'
print(searchforword(word, array))
[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]
我需要创建一个函数来搜索某个字符串是否在数组中,并创建一个包含包含它的所有元素(列表)的列表。例如:
word = 'busy'
array = [[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']],[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]]
所以我的输出应该是:
[['99', 'Normal', [], ['busy', '0'], 362.01, 'working', '1']]
但我只得到表明该字符串不存在的验证,而它显然存在。这是代码:
array = [[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']],[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]]
def searchBusyWorkers(array):
busy = []
for x in array:
if 'busy' in x:
ind = x.index('busy')
busy.append(array[ind])
return busy
else:
return "No workers have that condition."
试试这个
word = 'busy'
array = [[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']],
[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]]
def searchBusyWorkers(array,word):
out = []
for a in array:
for i in a:
for x in i:
try:
if word in x:
out.append(i)
except TypeError:
if word == x:
out.append(i)
if out:
return out
return "No workers have that condition."
print(searchBusyWorkers(array,word))
输出
[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']]
'busy' in x
失败,因为“busy”嵌套更深一层。换句话说,没有 'busy' in x
但 x 中有一个包含字符串“busy”的 sub-array。
由于您提到 'busy' 将始终位于特定索引处,因此您需要解压缩以获取 sub-array 然后检查该索引 -
for x in array:
elements, *_ = x
if 'busy' in elements[3]:
print(x)
输出
[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']]
这应该有效
new_list = []
for i in range(len(array)):
for j in (array[i]):
if isinstance(j, list):
try:
for r in j:
if word in r:
new_list.append(array[i])
except:
...
if word in j or word in array[i]: #update
new_list.append(array[i])
print(*new_list) # Update
输出:
[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']]
我会这样做:
array = [[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']],[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]]
def searchforword(word, array):
return([y for x in array for y in x for i in y if word in str(i)])
结果:
word = 'busy'
print(searchforword(word, array))
[['99', 'Normal', [], ['busy', '0'], 28016.2, 'working', '1']]
word = 'free'
print(searchforword(word, array))
[['F27', 'Normal', [], ['free', '0'], 28016.537865230806, 'working', '1']]