在数组数组中使用'in'

时间:2014-03-17 01:05:58

标签: python arrays

我有一个列表列表,所以是一个二维数组。我试图使用in来确定字符串是否在这些数组中。因此,我没有使用if word in wordlist:,而是使用:

for i in range(len(wordlist)):
   if word in wordlist[i]:
      wordlist[i][2] += 1 #this accounts for the frequency of a word in a file
if (i + 1 == len(wordlist) and word !=wordlist[len(wordlist)-1]):
   wordlist.append([word,linenum,1])

有更优雅的方式吗?

编辑: 示例wordlist

[['civilizati', 1, 1], ['of', 1, 1], ['science', 2, 1], ['is', 2, 1], ['knowledge', 3, 1], ['is', 3, 1]]

修改编辑:

我认为我的问题并不清楚。如果我使用的是1d列表,我可以这样做:

if(word in wordlist1d):
   print("It's here")
else:
   wordlist1d.append(word)

这比我的for循环怪物要优雅得多。但是,由于wordlist不是1d,所以wordlist中的语句单词永远不会返回true,即使word在wordlist的子列表中也是如此。我想知道是否有比使用for循环更优雅的方式。

4 个答案:

答案 0 :(得分:4)

不是使用索引指针并使用它来迭代列表,而是直接迭代列表:

for item in wordlist:
    if word in item:
        ....

只是为了证明他们是完全相同的:

In [2]: for item in wordlist:
   ...:     print item
   ...:
['civilizati', 1, 1]
['of', 1, 1]
['science', 2, 1]
['is', 2, 1]
['knowledge', 3, 1]
['is', 3, 1]

In [3]: for i in range(len(wordlist)):
   ...:     print wordlist[i]
   ...:
['civilizati', 1, 1]
['of', 1, 1]
['science', 2, 1]
['is', 2, 1]
['knowledge', 3, 1]
['is', 3, 1]

您想要的 - 现在您提供的数据格式 - 是

for item in wordlist:
    if word == item[0]:
        item[2] += 1

答案 1 :(得分:2)

最好使用dict将单词作为键,并将[linenum, count]对作为值。您的整个功能变得简单:

wordlist.setdefault(word, [linenum, 0])[1] += 1

如果你必须把它变成一个列表,你可以这样做:

[[k] + v for k, v in wordlist.items()]

答案 2 :(得分:2)

我建议使用else子句进行循环:

for sublist in wordlist:
    if word == sublist[0]:  # compare directly with the relevant part of the sublist
        sublist[2] += 1
        break  # we only will match at most once, so break after finding one
else:    # this clause is run if no break was hit
    wordlist.append([word, linenum, 1])

更有效的方法可能是使用从单词到lineno, count子列表的字典映射。搜索字典为O(1),而不是O(n)来搜索您的列表列表。为了使代码适用于未找到的单词,您可以使用setdefault方法:

d = {}
for word, lineno in document:
    d.setdefault(word, [lineno, 0])[1] += 1 # works whether or not word was in d before

答案 3 :(得分:1)

如果您要查找文件中的字数,可以执行以下操作:

from collections import Counter
wordlist = Counter(myfile.read().split())

如果你想获得文件中的所有单词,你可以这样做:

wordlist.keys()

如果你想得到一些主要词:

wordlist['myword']