【问题标题】:I cannot seem to find a string in a subarray in an array of arrays我似乎无法在数组数组的子数组中找到字符串
【发布时间】:2015-09-08 09:50:29
【问题描述】:

我试图在数组中查找字符串,但即使字符串包含在数组中,当我打印用于查找字符串的变量时,变量也会出现 False。任何帮助将不胜感激,下面是代码:

Name='Admin'
array=[['Joseph', '03', '01', 'NN'], ['Seph', '10', '08', '09'], ['Jo', '05', '04', '07'], ['Mark', '01', 'NN', 'NN'], ['BigDave', '00', '02', 'NN'], ['Davy', '03', 'NN', 'NN'], ['Admin', '10', 'NN', 'N']]
check=Name in array
print(check)

这个打印的结果是这个False,我不明白为什么会这样。

【问题讨论】:

  • 因为in array 只搜索列表的顶层,而不搜索内部列表。你的意思是例如check = any(Name in subarray for subarray in array) 还是 any(subarray[0] == Name ...)?或者,重构您的数据 - 字典 {'Joseph': ['03', '01', 'nn'], ...} 可以让您在 O(1) 而不是 O(n) 中查找名称。
  • 是的,我会这样做,但这意味着我必须重组我的数据编译器
  • @jonrshape 我还需要能够附加字典
  • 你是什么意思“附加字典”?您可以附加到字典内的列表,或添加具有自己列表值的新键。我建议您阅读涵盖数据结构的介绍性教程。
  • 向 dict 添加新项目是微不足道的。 theDict[newKey] = newValue 其中theValue 可以是您可能会使用的列表。

标签: python arrays python-3.x


【解决方案1】:

因为当您询问'Admin' 是否在数组中时,它不会检查嵌套数组。您必须遍历它们以查看 'Admin' 是否存在于其中之一中。

Name='Admin'
array=[['Joseph', '03', '01', 'NN'], ['Seph', '10', '08', '09'], ['Jo', '05', '04', '07'], ['Mark', '01', 'NN', 'NN'], ['BigDave', '00', '02', 'NN'], ['Davy', '03', 'NN', 'NN'], ['Admin', '10', 'NN', 'N']]
for subArray in array:
    if Name in subArray:
        print subArray

输出:

['Admin', '10', 'NN', 'N']

【讨论】:

    【解决方案2】:
    ls = []
    Name='Admin'
    array=[['Joseph', '03', '01', 'NN'], ['Seph', '10', '08', '09'],   ['Jo','05', '04', '07'], ['Mark', '01', 'NN', 'NN'], ['BigDave', '00', '02', 'NN'], ['Davy', '03', 'NN', 'NN'], ['Admin', '10', 'NN', 'N']]
    for i in xrange(len(array)):
       for j in xrange(len(array[i])):
          print i, "...........", j, ".........", ls.append(array[i][j])
    
    if 'Joseph' in ls:
       print 'yes'
    else:
       print 'no'
    

    因此您的代码中没有“名称”关键字,所以我从您的列表中添加了“约瑟夫”关键字

    【讨论】:

    • 我想要的太复杂了
    【解决方案3】:

    你可以做这样的傻事:

    Name='Admin'
    array=[['Joseph', '03', '01', 'NN'], ['Seph', '10', '08', '09'], ['Jo', '05', '04', '07'], ['Mark', '01', 'NN', 'NN'], ['BigDave', '00', '02', 'NN'], ['Davy', '03', 'NN', 'NN'], ['Admin', '10', 'NN', 'N']]
    check = True in [Name in arr for arr in array]
    print(check) # prints True
    

    【讨论】:

    • 一点也不傻,但any(list)True in list 可读性强得多
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 2019-06-16
    • 2020-06-19
    • 2020-03-26
    • 2015-01-09
    相关资源
    最近更新 更多