数値を含む一連の文字列が与えられた場合、スーパーセットである文字列を見つけるにはどうすればよいですか。たとえば、文字列 '139 24' と '139 277 24' が表示された場合、'139 24' はその中にあるため、'139 277 24' を保持します。また、これらの数値は、文字列内で任意の順序で表示される場合があります。
'24'
'277'
'277 24'
'139 24'
'139 277 24'
'139 277'
'139'
'136 24'
'136 277 24'
'136 277'
'136'
'136 139 24'
'136 139 277 24'
'136 139 277'
'136 139'
'246'
上記のデータの結果を以下に示します。
'136 139 277 24'
'246'
編集:各文字列を分割し、個々の数字をセットに入れ、リスト全体から作成されたセットでこれを比較しています。このアプローチを使用して解決策を見つけることができますが、同じことを実行する他のエレガントな方法があるはずです。
次のコードを試していて、不必要に複雑になっていると感じました。
#First create a set of tuples
allSeqsTuple = set()
for seq in allSeqs: #allSeqs store the sequences described above
x = seq.split()
allSeqsTuple.add(tuple(x))
#For each 'allSeqs', find if all the items in that seq that is in 'allSeqsTuple'.
for line in allSeqs:
x = set(line.split())
result = findContainment(x, allSeqsTuple)
......
......
def findContainment(x, allSeqsTuple):
contained = False
for y in allSeqsTuple:
cntnd = bool(x-set(y))
if (cntnd):
contained = True
continue
else:
break
return contained