我有一个数据列表,包括命令字符串以及字母,大写和小写,总计512+(包括子列表)字符串。我想解析输入数据,但我想不出任何方法来正确地做到这一点,除了从最大可能的命令大小开始并切断它,直到我找到一个与字符串相同的命令,然后输出的位置命令,但这需要永远。我能想到的任何其他方式都会导致重叠。我在python中这样做
说:
L = ['a', 'b',['aa','bb','cc'], 'c']
对于'bb',输出为'0201','c'为'03'
所以我应该怎么做?
答案 0 :(得分:2)
听起来你在列表中搜索每个子字符串。你怎么建立一个dict来查找键。因为你仍然需要开始搜索最长的子键。
L = ['a', 'b',['aa','bb','cc'], 'c']
def lookups( L ):
""" returns `item`, `code` tuples """
for i, item in enumerate(L):
if isinstance(item, list):
for j, sub in enumerate(item):
yield sub, "%02d%02d" % (i,j)
else:
yield item, "%02d" % i
然后,您可以使用以下内容查找子字符串:
lookupdict = dict(lookups(L))
print lookupdict['bb'] # but you have to do 'bb' before trying 'b' ...
但是如果密钥长度不只是1或2,那么将项目分组为单独的dicts也是有意义的,其中每个密钥具有相同的长度。
答案 1 :(得分:1)
如果必须使用此数据结构:
from collections import MutableSequence
def scanList( command, theList ):
for i, elt in enumerate( theList ):
if elt == command:
return ( i, None )
if isinstance( elt, MutableSequence ):
for j, elt2 in enumerate( elt ):
if elt2 == command:
return i, j
L = ['a', 'b',['aa','bb','cc'], 'c']
print( scanList( "bb", L ) )
# (2, 1 )
print( scanlist( "c", L ) )
# (3, None )
这是一个糟糕的数据结构。你能以更好的形式获得这些数据吗?