0

に等号がs1='fly,dream';s2='dream,fly' 欲しいような2つの文字列があります。s1s2

私が試したコードは次のとおりです。

def Isequal(m,n):
    s1=m.split(',')    s2=n.split(',')   s1.sort()   s2.sort()
    if s1 == s2:
        print 'Equal'
    else:
        print s1,s2

注: s1 は s2 と等しい場合があります。それで

def Isequal(m,n):
s1=m.split(',')
s2=n.split(',')
if s1 == s2.reverse() || s1 == s2:
print 'Equal'
else:
print s1,s2

このコードは正しいですか?改善すべき点はありますか?

4

3 に答える 3

5

コードは 2 つの文字列を,( を返す) で分割し、 でメソッドlistを呼び出します。2 つの部分文字列は同一であるため、部分文字列のリストを並べ替えると、リストは同じになります。何が起こっているのかを知る最善の方法は、それらを印刷することです。結果を参照してください。sortlist

>>> s1 = 'fly,dream'
>>> s2 = 'dream,fly'
>>> s1 = s1.split(',')
>>> s1
['fly', 'dream']
>>> s2 = s2.split(',')
>>> s2
['dream', 'fly']
>>> s1.sort()
>>> s1
['dream', 'fly']
>>> s2.sort()
>>> s2
['dream', 'fly']
>>> s1 == s2
True

2 つの文字列が同じ部分文字列で構成されていることを確認する場合は、sets次のように を使用します。

>>> varOne = set(s1.split(','))
>>> varTwo = set(s2.split(','))
>>> varOne == varTwo
True

セットはユニークなアイテムのみを許可することに注意fly,dream,flyください。dream,dream,flyTrue

于 2013-07-09T14:02:23.957 に答える
3

Set はここでよりエレガントになります:

def Isequal(m, n):
    s1 = set(m.split(','))
    s2 = set(n.split(','))
    if s1 == s2:
        print 'Equal'
    else:
        print s1, s2

また、より効率的である必要があります。

于 2013-07-09T14:05:26.360 に答える
1

sort()おそらく、リストを反転するために使用したくないでしょう。行われる並べ替えは、文字列に完全に依存します (各文字列の最初の文字によって異なります)。.reverseリストを逆にするために使用できます。

def Isequal(m,n):
    m = m.split(',')
    m.reverse()
    if m == n.split(','):
        print "Equal"
    else:
        print m, n

リストをその場で並べ替えたい場合は、.reverse()代わりにいつでも実行できます.sort()


リストを逆にすることが質問の単なる例であり、文字列を分割すると実際にはより多くのアイテムが含まれる場合は、セットを使用できます。

def Isequal(m,n):
    if not set(m.split(',')).symmetric_difference(n.split(',')):
        print "Equal"
    else:
        print m, n

ところで、Sparse is better than dense.. セミコロンはかなり... 醜いです。

于 2013-07-09T13:56:23.710 に答える