2017-09-06 3 views
-3
if i == len(a): 
    tempList.extend(b[j:]) 
    break 
elif j == len(b): 
    tempList.extend(a[i:]) 
    break 

私はこれをPythonのmergesortプログラムで使用しています。これをオンライナーに入れる方法はありますか?elif 1ライナーの場合

+3

j == len(b)の場合は、tempList.extend(b [j:])以外の場合はtempList.extend(a [i:])なし'しかし、Pythonの神の愛のために、それを使用しないでください。また、元のコードにはブレークロジックがないことに注意してください。 – DeepSpace

+0

@DeepSpace答えていただきありがとうございます!ちょうど意見を求めて、あなたはそれを与えました:D – Jonas

答えて

7

おそらく、専用の無回答を出しましょう:試してみてはいけません。

にコードを書き込まないでください。それは仕事が単純な方法でをします

  • それは明らか人間読者にその意味を伝える

上記のコードはすでにことが行われますように、あなたはそれを書きます。

他の言葉で言えば、もちろん正確であるは、ソースコードの貴重な財産です。あなたがと同じようにしてのコードを読むことができ、1つのバージョンが1つのライナーであり、もう1つのバージョンが長い場合は、短いバージョンになります。

しかし、私は、上記のコードが少ないコードで上記のように表現できると非常に疑問です。

+0

これはコメントでなければなりません。 – bfontaine

1

あなたはかなり読みやすいワンライナーを作るためにandorboolean operationsを使用することができます。

l = [] 
a = [1,2,3,4] 
b = [8,9,10] 
i = 4 
j = 2 

l.extend(i == len(a) and b[j:] or j == len(b) and a[i:] or []) 
l == [10] 

i = 0 
j = 3 

l.extend(i == len(a) and b[j:] or j == len(b) and a[i:] or []) 
l == [10, 1, 2, 3, 4] 

この例では、次のプロパティを使用しています:

表現x and y最初に評価さxを。 xがfalseの場合、その値が返されます。それ以外の場合はyが評価され、結果の値が返されます。

x or yは、最初にxを評価します。 xが真の場合、その値が返されます。それ以外の場合はyが評価され、結果の値が返されます。

私たちは、ときi == len(a) and j > len(b)(例えばi == 4 and j == 5)上げTypeError: 'bool' object is not iterable例外を軽減するためにor []を追加する必要があります。


私はまだ拡張バージョンを好むでしょう。

関連する問題