if i == len(a):
tempList.extend(b[j:])
break
elif j == len(b):
tempList.extend(a[i:])
break
私はこれをPythonのmergesortプログラムで使用しています。これをオンライナーに入れる方法はありますか?elif 1ライナーの場合
if i == len(a):
tempList.extend(b[j:])
break
elif j == len(b):
tempList.extend(a[i:])
break
私はこれをPythonのmergesortプログラムで使用しています。これをオンライナーに入れる方法はありますか?elif 1ライナーの場合
おそらく、専用の無回答を出しましょう:試してみてはいけません。
にコードを書き込まないでください。それは仕事が単純な方法でをします
上記のコードはすでにことが行われますように、あなたはそれを書きます。
他の言葉で言えば、もちろん正確であるは、ソースコードの貴重な財産です。あなたがと同じようにしてのコードを読むことができ、1つのバージョンが1つのライナーであり、もう1つのバージョンが長い場合は、短いバージョンになります。
しかし、私は、上記のコードが少ないコードで上記のように表現できると非常に疑問です。
これはコメントでなければなりません。 – bfontaine
あなたはかなり読みやすいワンライナーを作るためにand
とor
boolean 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 []
を追加する必要があります。
私はまだ拡張バージョンを好むでしょう。
j == len(b)の場合は、tempList.extend(b [j:])以外の場合はtempList.extend(a [i:])なし'しかし、Pythonの神の愛のために、それを使用しないでください。また、元のコードにはブレークロジックがないことに注意してください。 – DeepSpace
@DeepSpace答えていただきありがとうございます!ちょうど意見を求めて、あなたはそれを与えました:D – Jonas