පයිතන් හි ගොල්ෆ් ක්‍රීඩා කිරීම සඳහා උපදෙස්


262

පයිතන් හි ගොල්ෆ් ක්‍රීඩා කිරීම සඳහා ඔබට ඇති පොදු උපදෙස් මොනවාද? මම සොයන්නේ කේත-ගොල්ෆ් ගැටලුවලට අදාළ කළ හැකි සහ අවම වශයෙන් පයිතන්ට විශේෂිත වූ අදහස් (උදා: "අදහස් ඉවත් කිරීම" පිළිතුරක් නොවේ).

කරුණාකර පිළිතුරකට එක් ඉඟියක් පළ කරන්න.


28
ඔහ්, සෑම භාෂාවක් සඳහාම මෙවැනි ප්‍රශ්න මාලාවක් මට පෙනේ ...
ආර්. මාටින්හෝ ෆර්නැන්ඩස්

4
Ar මාටින්හෝ මම එකඟයි. C ++ ට සමාන ආරම්භයක් ලබා දී ඇත . මෙම ප්‍රශ්න වර්ග බොහොමයක් හරහා නැවත පළ කරන ලද එකම පිළිතුරු අප නොදකින තාක් කල් එය නරක දෙයක් යැයි මම නොසිතමි.
moinudin

52
ප්‍රශ්නයට ඇලුම් කරන්න, නමුත් "මෙය නිෂ්පාදන කේතය සඳහා නොවන විනෝදය සඳහා පමණි"
ග්‍රෙග් ගයිඩා

2
මෙම ප්‍රශ්නය ප්‍රජා විකී තනතුරක් විය යුතු නොවේද?
user8397947

3
ordorukayhan Nope; එය වලංගු කේත-ගොල්ෆ් ඉඟි ප්‍රශ්නයකි, CG'ing අරමුණු සඳහා පයිතන් කේතය කෙටි කිරීම සඳහා උපදෙස් ඉල්ලයි. එවැනි ප්‍රශ්න වෙබ් අඩවිය සඳහා පරිපූර්ණ ලෙස වලංගු වන අතර, මෙම ටැග් කිසිවක් පැහැදිලිවම පවසන්නේ CW'd විය යුතු බවයි. SO මෙන් නොව, CG අභියෝග CW'd වීමට අවශ්‍ය විය. එසේම, හොඳ පිළිතුරක් ලිවීම සහ එවැනි ඉඟි සොයා ගැනීම සැමවිටම සුදුසු දෙයකි, එය ප්‍රජා විකී (නියෝජිත) නම් ප්‍රශ්නය රැගෙන යයි.
එරික් ද අවුට්ගොල්ෆර්

Answers:


164

a=b=c=0වෙනුවට භාවිතා කරන්න a,b,c=0,0,0.

a,b,c='123'වෙනුවට භාවිතා කරන්න a,b,c='1','2','3'.


2
පොදුවේ එය හොඳ ඉඟියක් වේ :)

31
ඔබ විසින් වෙනස් කරනු ලබන විකෘති වස්තු නිර්වචනය කිරීම සඳහා මෙය අනිවාර්යයෙන්ම ක්‍රියා නොකරන බව සලකන්න. a = b = [1] ඇත්ත වශයෙන්ම a = [1] ට වඩා වෙනස් ය; b = [1]
isaacg

6
පළමු ඉඟියේ ඇති හාස්‍යජනක දෙය නම් එය ජාවා වලද ක්‍රියාත්මක වීමයි.
ජස්ටින්

1
Ust ජස්ටින් ඔව්, නමුත් ප්‍රාථමික වර්ග සමඟ පමණි
හයිපර් නියුට්‍රිනෝ

15
නමුත් සියලු විචල්‍යයන් එකම අවස්ථාවකට යොමු වන බැවින් කිසි විටෙකත් a = b = c = [] හෝ කිසියම් වස්තු උපස්ථරයක් භාවිතා නොකරන්න. එය බොහෝ විට ඔබට අවශ්‍ය දේ නොවේ.
PhE

157

කොන්දේසි දිගු විය හැකිය. සමහර අවස්ථාවලදී ඔබට සරල කොන්දේසියක් ආදේශ කළ හැකිය (a,b)[condition]. conditionසත්‍ය නම් , bආපසු ලබා දෙනු ලැබේ.

සසඳන්න

if a<b:return a
else:return b

මේ සඳහා

return(b,a)[a<b]

43
මේවා හරියටම සමාන නොවේ. පළමුවැන්නා තක්සේරු කරන්නේ ආපසු ලබා දෙන ප්‍රකාශනය පමණක් වන අතර දෙවැන්න සෑම විටම ඒවා දෙකම ඇගයීමට ලක් කරයි. මේවා කෙටි පරිපථයක් කරයි: a if a<b else bසහa<b and a or b
මැරිනස්

4
(lambda(): b, lambda(): a)[a < b]()ලැම්බඩාස් සමඟ ඔබේම කෙටි පරිපථයක් සාදන්න
මින්ග්-ටැං

3
ඇමරිනස්, ඒවා සමාන නොවේ: P and A or Bලබා දෙන ඕනෑම A සඳහා සලකා බලන්න bool(A)=False. නමුත් (P and [A] or [B])[0]එම කාර්යය කරනු ඇත. යොමු කිරීම සඳහා diveintopython.net/power_of_introspect/and_or.html බලන්න .
kgadek

7
ලැම්බඩාස් යනු කොන්දේසි සහිත ප්‍රකාශනයකට වඩා දිගු ය.
user2357112 7:07 ට මොනිකා

19
23 user2357112 නමුත් ඔබ ඒවා භාවිතා කරන විට ඒවා ඔබව වඩාත් සිසිල් කරයි. :]
චේස් රයිස්

127

මම වරක් කළ විශාල දෙයක් නම්:

if 3 > a > 1 < b < 5: foo()

වෙනුවට:

if a > 1 and b > 1 and 3 > a and 5 > b: foo()

පයිතන්ගේ සංසන්දනාත්මක ක්‍රියාකරුවන් රොක් වේ.


පයිතන් 2 හි සෑම දෙයක්ම සැසඳිය හැකි බව භාවිතා කිරීමෙන් ඔබට andක්‍රියාකරුට මේ ආකාරයෙන් වැළකී සිටිය හැකිය . උදාහරණයක් ලෙස, නම් a, b, cහා dපූර්ණ සංඛ්යා වන අතර,

if a<b and c>d:foo()

එක් අක්ෂරයකින් කෙටි කළ හැකිය:

if a<b<[]>c>d:foo()

මෙය භාවිතා කරන්නේ සෑම ලැයිස්තුවක්ම ඕනෑම නිඛිලයකට වඩා විශාල බවයි.

ලැයිස්තු නම් cසහ dමෙය වඩාත් හොඳ වේ:

if a<b<c>d:foo()

22
ඇත්ත වශයෙන්ම මෙය ඇත්ත වශයෙන්ම ගොල්ෆ් කර ඇත්නම් එය එසේ වනු ඇත3>a>1<b<5
Rafe Kettler

4
සමමිතියට ආදරය කරන්න. Per a සහ $ b හි මිනිත්තුව සොයා ගැනීම සඳහා පැරණි පර්ල් ගොල්ෆ් උපක්‍රමය මට මතක් කර දෙයි [$a => $b]->[$b <= $a]:)
සයිමන් වයිටකර්

දෙවන උදාහරණය (ලැයිස්තු නොමැත) සමඟ ද කළ හැකි බව සලකන්නif(a<b)+(c>d):foo()
වර්ල්ඩ්සෙන්ඩර්

6
+ විය යුත්තේ a *. ක orවනු ඇත+
WorldSEnder

2
foo()if 3>a>1<b<5
එරික් ද Outgolfer

108

ඔබ නැවත නැවත සාදන ලද ශ්‍රිතයක් භාවිතා කරන්නේ නම්, විවිධ තර්ක භාවිතා කරන්නේ නම් එයට නව නමක් ලබා දීම සඳහා එය වඩා අභ්‍යවකාශ කාර්යක්ෂම විය හැකිය:

r=range
for x in r(10):
 for y in r(100):print x,y

8
ඇත්ත වශයෙන්ම බයිට් කිසිවක් ඉතිරි කළේ නැත.
user2357112 7:06 ට මොනිකා

5
r = පරාසය සහ අනෙක් r දෙක අක්ෂර 9 කි; පරාසය දෙවරක් භාවිතා කිරීම අක්ෂර 10 කි. මෙම උදාහරණයේ විශාල ඉතිරියක් නොව සැලකිය යුතු ඉතිරියක් දැකීමට තවත් එක් පරාසයක් භාවිතා කිරීම අවශ්‍ය වේ.
ෆ්‍රෑන්ක්

16
RanFrank අතිරේක නව රේඛාව තවත් චරිතයකි.
L3viathan

4
ඇත්ත වශයෙන්ම පුනරාවර්තන දෙකක් දිග පහේ ක්‍රියාකාරී නාමයක් මත ඉතිරි කිරීමට නොහැකි තරම්ය. ඔබට අවශ්‍ය: දිග 2: 6 නියෝජිතයින්, දිග 3: 4 නියෝජිතයින්, දිග 4 හෝ 5: 3 නියෝජිතයින්, දිග> = 6: 2 නියෝජිතයින්. AKA (දිග -1) * (නියෝජිතයින් -1)> 4.
අර්ජන් ජොහැන්සන්

පළමු පන්තියේ කාර්යයන් ඇති සියලුම භාෂාවන්ට මෙය අදාළ වන බව සලකන්න.
bfontaine

102

සමහර විට ඔබේ පයිතන් කේතයට ඔබට මට්ටම් 2 ක් අවශ්‍ය වේ. කළ යුතු පැහැදිලි දෙය නම් එක් එක් ඉන්ඩෙන්ටේෂන් මට්ටම සඳහා අවකාශයන් එකක් සහ දෙකක් භාවිතා කිරීමයි.

කෙසේ වෙතත්, පයිතන් 2 ටැබ් සහ අභ්‍යවකාශ අක්ෂර විවිධ ඉන්ඩෙන්ටින් මට්ටම් ලෙස සලකයි.

මෙයින් අදහස් කරන්නේ පළමු ඉන්ඩෙන්ටේෂන් මට්ටම එක් ඉඩක් විය හැකි අතර දෙවැන්න එක් ටැබ් අක්ෂරයක් විය හැකිය.

උදාහරණයක් වශයෙන්:

if 1:
 if 1:
\tpass

\tටැබ් අක්ෂරය කොහිද?


1
නියමයි, මම කවදාවත් මේ ගැන හිතුවේ නැහැ!
ජූල්ස් ඔලෝන්

104
මෙය python3 හි අසමත් වේ: ඔබට තවත් අවකාශ සහ ටැබ් මිශ්‍ර කළ නොහැක (කෝඩ්ගොල්ෆ් සඳහා නරක දෙයක්, නමුත් අනෙක් සෑම අවස්ථාවකම හොඳ දෙයක්).
බකුරියූ

1
පයිතන් 3.4 හි මෙය හොඳින් ක්‍රියාත්මක වන බව පෙනේ.
ට්‍රයිකොප්ලැක්ස්

3
rictrichoplax , පයිතන් 3.4.3 දී මට ලැබෙනවාTabError: inconsistent use of tabs and spaces in indentation.
සිවිලිං කැට්

යොමු කිරීම සඳහා, ටැබ් එකක් අවකාශ 8 ක් වටී.
එරික් ද Outgolfer

97

නූල් ආදේශනය භාවිතා කරන්න සහ ඔබේ කේතයේ බොහෝ විට පුනරාවර්තනය වන execදිගු වචන සමඟ කටයුතු කිරීමට lambda.

a=lambda b:lambda c:lambda d:lambda e:lambda f:0   # 48 bytes  (plain)
exec"a=`b:`c:`d:`e:`f:0".replace('`','lambda ')    # 47 bytes  (replace)
exec"a=%sb:%sc:%sd:%se:%sf:0"%(('lambda ',)*5)     # 46 bytes  (%)

ඉලක්කගත නූල බොහෝ විට 'lambda 'වන අතර එය බයිට් 7 ක් දිග වේ. ඔබේ කේත ස්නිපටයේ සිදුවීම් අඩංගු nවන 'lambda 'අතර එය sබයිට් දිගු වේ යැයි සිතමු . ඉන්පසු:

  • මෙම plainවිකල්පය වන්නේ sදිගු බයිට්.
  • මෙම replaceවිකල්පය වන්නේ s - 6n + 29දිගු බයිට්.
  • මෙම %විකල්පය වන්නේ s - 5n + 22 + len(str(n))දිගු බයිට්.

සිට බිම් කැබැල්ලක් පුරා ගැලවීම බයිට්plain : මෙම විකල්ප තුනක් සඳහා, බව අපට පෙනෙනවා

  • සඳහා 5 n < lambdas, ඔබ වඩා හොඳ ලකුණු සියල්ල කිසිවක් විසිතුරු කරන්නේ නෑ.
  • සඳහා n = 5 , ලිවීම exec"..."%(('lambda ',)*5)2 බයිට් ගලවයි, සහ ඔබේ හොඳම විකල්පය වේ.
  • සඳහා n> 5 , ලිවීම exec"...".replace('`','lambda ')ඔබේ හොඳම විකල්පය වේ.

වෙනත් අවස්ථා සඳහා, ඔබට පහත වගුව සුචිගත කළ හැකිය:

          1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 (occurences)
       +---------------------------------------------------------
     3 |  -  -  -  -  -  -  -  -  -  -  -  -  -  -  r  r  r  r  r  
     4 |  -  -  -  -  -  -  -  -  -  r  r  r  r  r  r  r  r  r  r  
     5 |  -  -  -  -  -  -  -  r  r  r  r  r  r  r  r  r  r  r  r  
     6 |  -  -  -  -  -  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
     7 |  -  -  -  -  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
     8 |  -  -  -  %  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
     9 |  -  -  -  %  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
    10 |  -  -  %  %  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
    11 |  -  -  %  %  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
    12 |  -  -  %  %  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r = replace
    13 |  -  -  %  %  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r   % = string %
    14 |  -  %  %  %  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r   - = do nothing
    15 |  -  %  %  %  %  r  r  r  r  r  r  r  r  r  r  r  r  r  r  
  (length)

නිදසුනක් ලෙස, lambda x,y:ඔබේ කේතයේ 3 වතාවක් නූල් (දිග 11) සිදුවුවහොත් , ඔබ ලිවීමට වඩා හොඳය exec"..."%(('lambda x,y:',)*3).


4
මෙය වැඩි ඡන්ද ප්‍රමාණයක් ලබා ගත යුතුය, එය ඉතා ප්‍රයෝජනවත් තොරතුරකි.
bigblind

7
මෙය ක්‍රියාත්මක වීම අතිශයින් දුර්ලභ ය. පිරිවැය replaceඅති විශාලයි.
බූට්බි

4
එය ක්‍රියාත්මක වන විට එය බොහෝ සෙයින් උපකාරී වේ.
භූගත මොනෝරේල්

සිත්ගන්නාසුළු, කිසි විටෙකත් මේ ගැන නොසිතන්න!
ක්ලෝඩියු

2
.replace("R",'.replace("')බයිට් සුරැකීමට ඔබ මෙය බොහෝ විට භාවිතා කරන්නේ නම් , වෙනත් බොහෝ ආදේශන ලාභදායී වේ. (එය ඔබගේ කේතය මුළුමනින්ම කියවිය නොහැකි තත්වයට පත් කරයි.)
හයට්සු

83

බොහෝ අයගෙන් එක් නූලක් තෝරා ගැනීමට දීර් s පෙති භාවිතා කරන්න

>>> for x in 0,1,2:print"fbboaaorz"[x::3]
... 
foo
bar
baz

එදිරිව

>>> for x in 0,1,2:print["foo","bar","baz"][x]
... 
foo
bar
baz

මෙම බූලියන් දෙකේ නඩුවේදී කෙනෙකුට ලිවිය හැකිය

b*"string"or"other_string"

සදහා

["other_string","string"][b]

අන්තර් සම්බන්ධතාව මෙන් නොව, මෙය ඕනෑම දිගකින් යුත් නූල් සඳහා ක්‍රියා කරයි, නමුත් bප්‍රකාශනයක් නම් ක්‍රියාකරුගේ ප්‍රමුඛතා ගැටළු තිබිය හැකිය .


පළමු උදාහරණය හරියටම දිගට සමාන බව සලකන්නfor x in ("foo","bar","baz"): print x
මාටීන් උල්හාක්

1
Ate මාටින් උල්හාක්, එය විවිධ අගයන් විදහා දක්වන ආකාරය පිළිබඳ උදාහරණයක් පමණි x. ගොල්ෆ් කළ කොටස "fbboaaorz"[x::3]එදිරිව එදිරිව ["foo","bar","baz"][x]. xවටිනාකම ලබා ගන්නේ කෙසේද යන්න ඔබගේ ගොල්ෆ් විසඳුමේ තවත් කොටසක් වනු ඇත.
gnibbler

79

බැලීමේ වගු මැජික් අංක ලෙස ගබඩා කරන්න

පළමු ඉංග්‍රීසි අංක දොළහෙන් එකක් අඩංගු වන බූලියන් බැලීමේ වගුවක් දෘඩ කේත කිරීමට ඔබට අවශ්‍ය යැයි පවසන්න n.

0: False
1: True
2: False
3: False
4: False
5: False
6: False
7: True
8: False
9: True
10:True
11:True
12:False

එවිට, ඔබට මෙම විමසුම් වගුව සංක්ෂිප්තව ක්‍රියාත්මක කළ හැකිය:

3714>>i&1

එහි ප්‍රති ing ලයක් ලෙස 0හෝ 1සමාන Falseවීම True.

අදහස නම්, මැජික් අංකය වගුව bitstring bin(3714)= ලෙස ගබඩා කර 0b111010000010ඇති අතර, n-වන ඉලක්කම් (අවසානයේ සිට) අනුරූපව nth වන වගුවට ඇතුළත් වේ. nඅංක nඅවකාශය දකුණට හරවා අවසන් ඉලක්කම් මගින් අපි තුන්වන පිවිසුමට පිවිසෙමු &1.

මෙම ගබඩා ක්‍රමය ඉතා කාර්යක්ෂම වේ. විකල්ප සමඟ සසඳන්න

n in[1,7,9,10,11]
'0111010000010'[n]>'0'

ඔබේ විමසුම් වගු ගබඩාවේ බහුකාර්ය ඇතුළත් කිරීම් ලබා ගත හැකිය

 340954054>>4*n&15

අදාළ බිටු හතරේ කොටස ලබා ගැනීමට.


බිටු හතරේ කොටස සඳහා අපට උදාහරණ ප්‍රති result ලයක් ලබා ගත හැකිද? ඔබ n-bit වාරණය සඳහා රීතියක් භාවිතා කළාද?
jeromej

9
හෙක්ස් සමහර විට ඊටත් වඩා කුඩා විය හැකිය.
ජූනාසාන්

5
මෙය භාෂා රාශියකට ප්‍රයෝජනවත් වේ.
සයෝස්

1
999 999 ට වැඩි අංක සඳහා ජූනාසාන් හෙක්ස් කුඩා වේ .
මාටීන් උල්හාක්

77

භාවිතා `n`කිරීම වෙනුවට පූර්ණ සංඛ්‍යාවක් නූලකට පරිවර්තනය කිරීමට භාවිතා කරන්න str(n):

>>> n=123
>>> `n`
'123'

42
හොඳයි, නමුත් පයිතන් 3 සමඟ වැඩ කරන්නේ නැහැ.
ඇලෙක්සැන්ඩ්රු

2
අවධානය: ඇත්ත වශයෙන්ම පූර්ණ සංඛ්‍යා සඳහා ක්‍රියා කරයි, නමුත් නූල් සඳහා නොවේ.
නකිලොන්

43
btw. `` repr සඳහා කෙටි වේ
ඇලෙක්සැන්ඩ්‍රු

10
-2 ** 31 ට වඩා කුඩා හෝ 2 ** 31-1 (ලෝන්ග්ස්) ට වඩා විශාල සංඛ්‍යාවක් අවසානයේ දී 'එල්' ලබා ගනී.
hallvabo

6
සම්පූර්ණ නිරවද්‍යතාවයෙන් පාවෙන මුද්‍රණය කිරීමටද මෙය භාවිතා කළ හැකිය
gnibbler

69

සංඛ්‍යාත්මක ලූප දෙකක් එකකට කඩා දමන්න

ඔබ ජාලකයක සෛල හරහා ගමන් කරන බව පවසන්න m*n. කැදැලි forලූප දෙකක් වෙනුවට , පේළියකට සහ තීරු වලින් එකක් වෙනුවට, ජාලකයේ m*nසෛල හරහා නැවත ගමන් කිරීම සඳහා තනි පුඩුවක් භාවිතා කිරීම සාමාන්‍යයෙන් කෙටි වේ . ඔබට ලූපය තුළ කොටුවේ පේළිය සහ තීරුව උකහා ගත හැකිය.

මුල් කේතය:

for i in range(m):
 for j in range(n):
  do_stuff(i,j)

ගොල්ෆ් කේතය:

for k in range(m*n):
  do_stuff(k/n,k%n)

ඇත්ත වශයෙන්ම, ඔබ දෙදෙනා සංකේතවත් වන පරාස දෙකක් ලක්ෂයේ කාටිසීය නිෂ්පාදන වැඩි එල්ලාවල මහතා කරන්නේ (i,j)ලෙස x=i*n+j. ඔබ rangeලූපය තුළ මිල අධික ඇමතුමක් සහ ඉන්ඩෙන්ටේෂන් මට්ටමක් ඉතිරි කර ඇත. පුනරාවර්තනයේ අනුපිළිවෙල වෙනස් නොවේ.

භාවිතය //වෙනුවට /Python 3. ඔබ වෙත යොමු නම් iසහ jබොහෝ අවස්ථාවල, තම තමන්ගේ වටිනාකම් අනුයුක්ත කිරීමට වේගවත් විය හැක i=k/n, j=k%nකම්බියක් ඇතුළත.


5
මේක නම් නියමයි. මම හිතුවේ නැහැ මේක වෙන්න පුළුවන් කියලා!
theonlygusti

මම මෙය ජාවාස්ක්‍රිප්ට් සඳහා ඉඟි වලින් දුටුවෙමි. එය බොහෝ භාෂාවලින් ඉතා ප්‍රයෝජනවත් උපක්‍රමයකි.
සයෝස්

10
යොමුව සඳහා, මෙය ලූප 3 ක් දක්වා for i in range(m*n*o): do_stuff(i/n/o,i%(n*o)/o,i%o)
දීර් extend කිරීම සඳහා

4
සඳහා n: වළළු repl.it/EHwa
mbomb007

2
සමහර අවස්ථාවලදී, itertools.productකැටයම් ලූපවලට වඩා සංක්ෂිප්ත විය හැකිය, විශේෂයෙන් කාටේෂියානු නිෂ්පාදන උත්පාදනය කිරීමේදී. සහa1, a2, b1, b2'ab''12'
Aaron3468

61

නිඛිල සඳහා n, ඔබට ලිවිය හැකිය

  • n+1 පරිදි -~n
  • n-1 පරිදි ~-n

මොකද බිට් ෆ්ලිප් ~xඑක සමානයි -1-x. මෙය එකම අක්‍ෂර සංඛ්‍යාවක් භාවිතා කරයි, නමුත් ක්‍රියාකරුගේ ප්‍රමුඛතාවය සඳහා වක්‍රව අවකාශ හෝ වර්‍ග කපා ගත හැකිය.

සසඳන්න:

while n-1:  #Same as while n!=1 
while~-n:

c/(n-1)
c/~-n

or f(n)+1
or-~f(n) 

(n-1)/10+(n-1)%10
~-n/10+~-n%10

මෙම ක්රියාකරුවන් ~හා ඒකජ -වඩා ඉහළ තැනක්ද වේ *, /, %, මෙන් නොව ද්විමය +.


14
මෙම උපක්‍රමයේ වෙනසක් මම අද දක්වා දිව ගියෙමි: -~-xඑදිරිව එක් බයිට් එකක් ඉතිරි (1-x)කරයි.
ලින්

6
තවත් ප්‍රයෝජනවත් යෙදුමක් නම් a+b+1එය වඩාත් සංක්ෂිප්තව ලිවිය හැකිය a-~b.
ස්ට්‍රිගොයිඩ්ස්

ඒ වගේම n-i-1සාධාරණයි n+~i.
ruohola

60

පහත දැක්වෙන ටෝකනය ආරම්භ වන්නේ eනැතිනම් හෝ E. අංකයක් අනුගමනය කිරීමෙන් ඔබට අවකාශය ඉවත් කළ හැකිය.

උදාහරණයක් වශයෙන්:

if i==4 and j==4:
    pass

බවට පත්වේ:

if i==4and j==4:
    pass

මෙය සංකීර්ණ එක් පේළි ප්‍රකාශයකින් භාවිතා කිරීමෙන් අක්ෂර කිහිපයක් ඉතිරි කර ගත හැකිය.

සංස්කරණය කරන්න: @marcog පෙන්වා දුන් පරිදි, ක්‍රියා 4or aකරනු ඇත, නමුත් a or4මෙය විචල්‍ය නාමයක් සමඟ පටලවා ගන්නා පරිදි නොවේ .


41
if(i,j)==(4,4):ඊටත් වඩා කෙටි වන අතර මෙම විශේෂ අවස්ථාවෙහිදීif i==j==4:
gnibbler

3
ආශ්‍රිත: 4or aක්‍රියා, නමුත් නොවේa or4
moinudin

18
0orඑසේම ක්‍රියා නොකරයි ( 0oඅෂ්ටක සංඛ්‍යා සඳහා උපසර්ගයකි).
නබ්

6
Ab නබ් 0 or xසෑම විටම නැවත පැමිණෙන බැවින් එය කෙසේ හෝ වැදගත් නොවේ x. කපන්නත් පුළුවන් 0 or.
ɐɔıʇǝɥʇuʎs

6
0orදිගු සංඛ්‍යාවක කොටසක් ලෙස හොඳයි. 10 or xසමාන වේ 10or x.
trichoplax

57

පයිතන් 3 හි ලැයිස්තුගත කිරීම සඳහා පුනරාවර්තනයක් පරිවර්තනය කිරීමට හොඳ ක්‍රමයක් :

ඔබට යම්කිසි ක්‍රියාකාරීත්වයක් ඇති බව සිතන්න

i = (1,2,3,4)
i = range(4)
i = (x**2 for x in range(5))

නමුත් ඔබට ලැයිස්තුවක් අවශ්‍යයි:

x=list(i)  #the default way
*x,=i      #using starred assignment -> 4 char fewer

නූලකින් අක්ෂර ලැයිස්තුවක් සෑදීම ඉතා ප්‍රයෝජනවත් වේ

s=['a','b','c','d','e']
s=list('abcde')
*s,='abcde'

1
ටයිප් *s,='abcde'කර sමගේ අන්තර්ක්‍රියාකාරී පයිතන් 3 සෙග්ෆෝල්ට් එකකින් බිඳ දමයි :(
daniero

an ඩැනීරෝ වොව්. අන්තර්ක්‍රියාකාරී කොන්සෝලය මත පමණක්ද? හරිම අමුතුයි වගේ. පිරිසිදු කොන්සෝලයකින් එය උත්සාහ කරන්න හෝ දෝෂය වාර්තා කරන්න
JBernardo

1
මගේ පයිතන් 3.5 හොඳින් ක්‍රියා කරයි.
NoOneIsHere

i = (x ** 2 සඳහා x පරාසය සඳහා (5)) මට මෙම කේතය <ජනක වස්තුව <genexpr> 0x03321690>
ජෝර්ජ්

7
ඔබ මෙය ප්‍රකාශනයකින් කරන්නේ නම්, ඔබට එය කළ හැකිය [*'abcde'].
පලතුරු වෙන් කිරීම

50

අනුපිළිවෙල ආපසු හැරවීමට ඔබට හොඳ පැරණි පිටසක්වල සිනහමුසු මුහුණ භාවිතා කළ හැකිය:

[1, 2, 3, 4][::-1] # => [4, 3, 2, 1]

49

ඒ වෙනුවට range(x), ඔබට *ඇත්ත වශයෙන්ම එහි වටිනාකම භාවිතා කිරීමට අවශ්‍ය නොවන්නේ නම්, ඔබට ඕනෑම දෙයක් ලැයිස්තුවක් මත ක්‍රියාකරු භාවිතා කළ හැකිය i:

for i in[1]*8:pass

විරුද්ධ ලෙස

for i in range(8):pass

ඔබට මෙය දෙවරකට වඩා කිරීමට අවශ්‍ය නම්, ඔබට ඕනෑම විචල්‍යයකට විචල්‍යයක් පැවරිය හැකි අතර එම විචල්‍යය ඔබට අවශ්‍ය පරාසය අනුව ගුණ කරන්න:

r=1,
for i in r*8:pass
for i in r*1000:pass

සටහන : මෙය බොහෝ විට වඩා දිගු වේ exec"pass;"*8, එබැවින් මෙම උපක්‍රමය භාවිතා කළ යුත්තේ එය විකල්පයක් නොවන විට පමණි.


roudproudhaskeller මම හිතන්නේ ඔබ ඉවත් කළ රේඛාවේ කාරණය වූයේ "ඔබට ලැබෙන පැහැදිලි චරිත ඉතිරිකිරීම් [1]*8වලට වඩා කෙටි නිසා range(8), ඔබට අවකාශයක් ඉතිරි කර ගත හැකි for i in[...වන්නේ නීත්‍යානුකූල නොවන අතර ඉඩක් නොමැති නිසාය for i in range..." යන්නයි.
භූගත මොනෝරේල්

ඔහ්, හරි, මට ඒක තේරුණේ නැහැ. දැන් සවි කර ඇත
සාඩම්බර හැස්කලර්

7
exec"pass;"*8සැලකිය යුතු ලෙස කෙටි වේ.
ජේම්ස්

1
නම් r=1, r*88 නම් , ඔබට සංඛ්‍යාවක් හරහා නැවත යෙදිය නොහැක. මම හිතන්නේ ඔබ අදහස් කළේr=[1]
ආටෙමිස් තවමත් SE

1
R ආටෙමිස්ෆෝල්, නැත, එය කමක් නැත, 1 න් පසු කොමාව නැවත ලබා ගත හැකි ටුපල් එකක් නිර්මාණය කරයි.
සාෂා

44

විස්තාරණය කළ හැකි නැවත ඉවත් කිරීම ("තරු ලකුණු කිරීම", පයිතන් 3 පමණි)

මෙය පැහැදිලි කිරීමට හොඳම ක්‍රමය උදාහරණයකි:

>>> a,*b,c=range(5)
>>> a
0
>>> b
[1, 2, 3]
>>> c
4

මේ සඳහා භාවිතයක් අපි දැනටමත් දැක ඇත්තෙමු - පයිතන් 3 හි නැවත සැකසිය හැකි ලැයිස්තුවක් බවට පත් කිරීම :

a=list(range(10))
*a,=range(10)

මෙන්න තවත් භාවිතයන් කිහිපයක්.

ලැයිස්තුවකින් අවසාන අංගය ලබා ගැනීම

a=L[-1]
*_,a=L

සමහර අවස්ථාවන්හිදී, පරපෝෂිතයන් මත ඉතිරි කිරීම සඳහා පළමු අංගය ලබා ගැනීම සඳහා මෙය භාවිතා කළ හැකිය:

a=(L+[1])[0]
a,*_=L+[1]

හිස් ලැයිස්තුවක් සහ වෙනත් විචල්‍යයන් පැවරීම

a=1;b=2;c=[]
a,b,*c=1,2

හිස් නොවන ලැයිස්තුවක පළමු හෝ අවසාන අංගය ඉවත් කිරීම

_,*L=L
*L,_=L

මේවා විකල්පයන්ට වඩා කෙටි වන L=L[1:]අතර L.pop(). ප්‍රති result ලය වෙනත් ලැයිස්තුවකට සුරැකිය හැක.

ඉඟි අනුග්‍රහය @grc


වාව්! මම a=1;L=[]බොහෝ වාර ගණනක් ලියා ඇත. මේ තරම් සරල දෙයකට අක්ෂර සුරැකීමට හැකිවීම පුදුම සහගතය.
xnor

nxnor ඒකට ස්තූතියි grc. තවත් එක් අංගයක් සමඟ එය එතරම් හොඳ නැත ( a,*L=1,), නමුත් එය තවමත් එක් වර්‍ගයක් ඉතිරි කරයි :)
Sp3000

ලැයිස්තුවේ පළමු හා අවසාන අංග දෙකම ඔබට ලබා ගත හැකි බව අමතක නොකරන්නa,*_,b=L
Cyoce

39

පයිතන් 2.7 හි වචනාර්ථයන් සකසන්න

ඔබට මෙවැනි කට්ටල ලිවිය හැකිය. S={1,2,3}මෙයින් අදහස් කරන්නේ එක් අක්‍ෂරයක් ඉතිරි කරන {e}&Sවෙනුවට සාමාජිකත්වය පරික්ෂා කළ හැකි e in Sබවයි.


4
මෙම ද චරිතය ඉතිරි ifහිඩැස් නැති (පවතින බැවින් ගේ if{e}&S:)
Artyer

1
එම උපක්‍රමය not inමඟින් ඔබට ප්‍රතිස්ථාපනය කළ හැකි බව සලකන්න{e}-S
බ්ලැක් ඕල් කායි

37

මුළු හෝඩියම ලබා ගැනීමට කෙටි ක්‍රමයක් ගැන සිතීමට මට නොහැකි වීම අවුරුදු ගණනාවක් තිස්සේ මට කරදරයක් විය. ඔබේ වැඩසටහන තුළ තිබිය යුතු rangeතරම් ප්‍රමාණයක් ඔබ භාවිතා කරන්නේ R=rangeනම්, එසේ නම්

[chr(i+97)for i in R(26)]

බොළඳට වඩා කෙටි ය

'abcdefghijklmnopqrstuvwxyz'

, නමුත් වෙනත් ආකාරයකින් එය තනි අක්ෂරයකින් දිගු වේ. ඇස්කි සාරධර්ම පිළිබඳ යම් දැනුමක් අවශ්‍ය වූ බුද්ධිමත් තැනැත්තා සියලු අක්ෂර ටයිප් කරනවාට වඩා වාචික බව මට හොල්මන් කළේය.

මගේ දියණියගේ හෝඩිය සඳහා මෙම පිළිතුර දකින තුරු . මෙම බුද්ධිය OP හි කාර්යයක් ද නැතිනම් එය විචාරකයෙකුගේ යෝජනාවක් ද යන්න සොයා ගැනීමට තරම් සංස්කරණ ඉතිහාසය මට අනුගමනය කළ නොහැක, නමුත් මෙය (මම විශ්වාස කරමි) අකුරු 26 න් නැවත සැකසිය හැකි කෙටිම ක්‍රමය මෙයයි. රෝම හෝඩියෙහි.

map(chr,range(97,123))

නඩුව වැදගත් නොවේ නම්, ඔබට ලොකු අකුරක් භාවිතා කර වෙනත් අක්ෂරයක් ඉවත් කළ හැකිය:

map(chr,range(65,91))

මම mapඕනෑවට වඩා මාර්ගය භාවිතා කරමි , මෙය මට කිසිදා සිදු නොවූයේ කෙසේදැයි මම නොදනිමි.


4
මෙය සත්‍ය කේතීකරණයේදී භාවිතා කළ හැකිය, මේ දේවල් දෘඩ කේතනය කිරීමේදී මට මෝඩකමක් දැනේ: ')
ටූන් ඇල්ෆ්‍රින්ක්

37
සත්‍ය කේතීකරණයේදී, භාවිතා කරන්න string.lowercase- එය එහි ඇත්තේ එයයි.
කෙවින් එස්

1
ඔබට අවස්ථා දෙකම අවශ්‍ය නම්, මා දන්නා කෙටිම ක්‍රමය පෙරණයයි (str.isalpha, map (chr, range (256))). එය s = map (chr, range (256)) ට වඩා යන්තම් කෙටි ය; s + = map (str.lower, s)
quintopia

inquintopia: 122 ( ord('z')) වෙනුවට 256 ඇයි ? එය එකම දිගක් හැරුණු විට ... එසේම, ඔබට අක්ෂරාංක අවශ්‍ය නම්, str.isalpha@ ක්වින්ටෝපියා අනුවාදය සමඟ ආදේශ කරන්න str.isalnum. (නමුත් ඔබට අවශ්‍ය වන්නේ එක් නඩුවක් පමණක් නම්, අක්ෂර 36 කින් යුත් නූල් තවදුරටත් නොවේ filter(str.isalnum,map(chr,range(90))).)
ටිම් පෙඩරික්

2
ඔබ අසාධාරණ ලෙස භාවිතා කර පරාසය භාවිතා කරන්නේ නම් R, මගේ අනුවාදය ඔබේ මුල් පිටපතට වඩා කෙටි ය: '%c'*26%tuple(R(97,123))(අක්ෂර 24 ක් පමණි) ඔබ අක්ෂර වින්‍යාසය කළහොත් rangeඑය හෝඩිය තරම් ඉහළ ය - ලොකු අකුරු කෙටි වේ
ජේබර්නාඩෝ

34

පයිතන්ට ස්විච් ප්‍රකාශ නොමැති වුවද, ඔබට ඒවා ශබ්ද කෝෂවලින් අනුකරණය කළ හැකිය. උදාහරණයක් ලෙස, ඔබට මේ වගේ ස්විචයක් අවශ්‍ය නම්:

switch (a):
    case 1:
        runThisCode()
        break
    case 2:
        runThisOtherCode()
        break
    case 3:
        runThisOtherOtherCode()
        break

ඔබට ifප්‍රකාශ භාවිතා කළ හැකිය , නැතහොත් ඔබට මෙය භාවිතා කළ හැකිය:

exec{1:"runThisCode()",2:"runThisOtherCode()",3:"runThisOtherOtherCode()"}[a]

හෝ මෙය:

{1:runThisCode,2:runThisOtherCode,3:runThisOtherOtherCode}[a]()

සියලුම කේත මාර්ග එකම පරාමිතීන් සහිත ශ්‍රිත නම් එය වඩා හොඳය.

පෙරනිමි අගයකට සහය දැක්වීම සඳහා මෙය කරන්න:

exec{1:"runThisCode()"}.get(a,"defaultCode()")

(හෝ මේ :)

­­{1:runThisCode}.get(a,defaultCode)()

මෙහි ඇති තවත් වාසියක් නම්, ඔබට අතිරික්තයක් ඇත්නම්, ශබ්දකෝෂයේ අවසානයෙන් පසුව ඔබට ඒවා එකතු කළ හැකිය:

exec{'key1':'code','key2':'code'}[key]+';codeThatWillAlwaysExecute'

ඔබට වටිනාකමක් ලබා දීම සඳහා ස්විචයක් භාවිතා කිරීමට අවශ්‍ය නම්:

def getValue(key):
    if key=='blah':return 1
    if key=='foo':return 2
    if key=='bar':return 3
    return 4

ඔබට මෙය කළ හැකිය:

getValue=lambda key:{'blah':1,'foo':2,'bar',3}.get(key,4)

2
මෙය මම වනාන්තරයේ භාවිතා කිරීම ගැන ගැඹුරින් සලකා බැලිය යුතු දෙයකි. මට මගේ ස්විච් ප්‍රකාශයන් මග හැරී ඇත! +1
HalosGhost

1
පළමු උදාහරණයේ අංක සහිත ශබ්ද කෝෂයක් භාවිතා කරනවා වෙනුවට, ඔබ ලැයිස්තුවක් භාවිතා කළ යුතුය
Cyoce

2
ඔබට යතුරු ලෙස නූල් තිබේ නම්, බයිට් 2 * n-4 ඉතිරි කිරීම dict(s1=v1,s2=v2,...,sn=vn)වෙනුවට භාවිතා {'s1':v1,'s2':v2,...,'sn':vn}කිරීම වඩා හොඳ නම් n> = 3
කළු ඕවල් කායි

32

වීජ වටිනාකම් දෙකක් ඇති විට aසහ b, ඔබ මේ දෙකම නම් සොයා ගැනීමට අවශ්ය නම්, aහා bසැබෑ වන අතර, භාවිතය *වෙනුවට and:

if a and b: #7 chars

එදිරිව

if a*b: #3 chars

එක්කෝ අගය අසත්‍ය නම්, එය 0එම ප්‍රකාශයේ දී මෙන් ඇගයීමට ලක් කරනු ඇති අතර පූර්ණ සංඛ්‍යාවක් සත්‍ය වන්නේ එය අස්ථිර නම් පමණි.


10
හෝ ඔබ භාවිතා කළ හැකි &: a=b=False,a&b
ɐɔıʇǝɥʇuʎs

3
භාවිතය +සඳහා orඔබ සහතික කළ හැකි නම්a != -b
undergroundmonorail

2
|සෑම අවස්ථාවකම ක්‍රියා කරයි.
කැල්කියුලේටර්

1
*බොහෝ භාෂාවලින් බයිට් කිහිපයක් and/ සුරකිනවා වෙනුවට &&.
wastl

29

ලැයිස්තුවක පිටුපස සිට දර්ශකයට ~ භාවිතා කරන්න

නම් Lලැයිස්තුවක්, භාවිතා වේ L[~i]ද ලබා ගැනීමට iපිටුපස සිට 'වැනි අංගයක්.

මෙය iආපසු හැරවීමේ තුන්වන අංගයයි L. බිට් අනුපූරකය ~iසමාන වන අතර -i-1, ඉන් එක් එක් දෝෂය නිවැරදි කරයි L[-i].


28

ලැම්බඩා සමඟ එක් පේළියේ කාර්යයක් කළ හැකිය:

def c(a):
  if a < 3: return a+10
  else: return a-5

බවට පරිවර්තනය කළ හැකිය (සටහන නැතිවූ ඉඩ 3andසහ 10or)

c=lambda a:a<3and a+10or a-5

24
හෝ c=lambda a:a+[-5,10][a<3]. ඔබ
කෙටි චක්‍රීය

3
ඔබගේ ශ්‍රිතයේ දී, ශ්‍රිතය ක්‍රියාත්මක කිරීම නවත්වන else: බැවින් අතහැර දැමිය හැකිය return, එබැවින් පහත සඳහන් සියල්ල ක්‍රියාත්මක වන්නේ ifකොන්දේසිය අසමත් වුවහොත් පමණි else. මේ අනුව elseආරක්ෂිතව අතහැර දැමිය හැකිය. (එහි ඇති
නියෝෆයිට්

c (-10) ආපසු -15 වන අතර එය 0 විය යුතුය
Anvit

හෝc=lambda a:a-5+15*(a<3)
ජේක්සන්

28

පයිතන් 2 නූල් නිරූපණයන් සූරාකන්න

xඅක්ෂර `x`2 ක වියදමින් වස්තුවක් එහි නූල් නිරූපණයට පරිවර්තනය කිරීමට පයිතන් 2 ඔබට ඉඩ දෙයි . වස්තුවට වඩා වස්තුවේ නූලෙන් පහසුවෙන් කළ හැකි කාර්යයන් සඳහා මෙය භාවිතා කරන්න.

අක්ෂර හා සම්බන්ධ වන්න

අක්ෂර ලැයිස්තුවක් ලබා දී l=['a','b','c'], කෙනෙකුට නිපදවිය ''.join(l)හැකි `l`[2::5]අතර එය බයිට් එකක් ඉතිරි කරයි.

හේතුව බව ය `l`යනු "['a', 'b', 'c']"එක්, ලැයිස්තුවක් පෙත්තක් සමග ලිපි උපුටා හැකි දෙවන ශුන්ය-සුචිගත චරිතය බව ආරම්භ එසේ (හිස් අවකාශයක්), aඅතර, එහි සිට සෑම පස්වන චරිතය ගනිමින්. බහු-අක්ෂර නූල් හෝ සම්බන්ධ වන අක්ෂර වලින් සම්බන්ධ වීමට මෙය ක්‍රියා නොකරයි '\n'.

සංක්ෂිප්ත ඉලක්කම්

ඒ හා සමානව, සමාන අකුරු, හිස්-නොවන ලැයිස්තුව ලබා l=[0,3,5], එක් කෙනෙක් වත් string එකකට concatenate හැකි '035'ලෙස `l`[1::3].

මෙය වැනි දෙයක් කිරීමෙන් ඉතිරි map(str,l)වේ. ඒවා තනි ඉලක්කම් විය යුතු බවත්, 1.0මිශ්‍ර කළ පාවෙන ඒවා තිබිය නොහැකි බවත් සලකන්න . එසේම මෙය හිස් ලැයිස්තුවේ අසමත් වන අතර නිෂ්පාදනය ]කරයි.

නිෂේධනීය දේ සඳහා පරීක්ෂා කරන්න

දැන්, නූල් නොවන කාර්යයක් සඳහා. ඔබ සතුව lතාත්වික සංඛ්‍යා ලැයිස්තුවක් ඇති අතර එහි කිසියම් negative ණ සංඛ්‍යාවක් තිබේදැයි පරීක්ෂා කිරීමට අවශ්‍ය යැයි සිතමු .

ඔබට කළ හැකිය

'-'in`l`

එය නූල් රෙප් එකේ negative ණ ලකුණක් පරික්ෂා කරයි. මෙය දෙකටම වඩා කෙටි ය

any(x<0for x in l)
min(l+[0])<0   

දෙවැන්න සඳහා, min(l)<0හිස් ලැයිස්තුවේ අසමත් වනු ඇත, එබැවින් ඔබට ආරක්ෂිත විය යුතුය.


තනි ඉලක්කම් නූල් කැපීම පයිතන් 3 හි effective ලදායී වේ, අඩු වුවද: str(l)[2::5]බයිට් 12 ක් වන අතර 19 ට එදිරිව ''.join(map(str,l)). මෙය පැමිණි සත්‍ය තත්වයක් ( lජනක යන්ත්‍ර ප්‍රකාශයක්, ලැයිස්තුවක් නොව) මට එක් බයිට් එකක් පමණක් ඉතිරි කළේය ... එය තවමත් වටී!
ටිම් පෙඩරික්

28

සිවිලිම සහ මහල

ඔබට කවදා හෝ බෙදීමක් සඳහා වටකුරු ප්‍රති result ලයක් ලබා ගැනීමට අවශ්‍ය නම් //, ඔබ බිම සඳහා කළ ආකාරයටම , ඔබට math.ceil(3/2)15 ක් හෝ ඊට වඩා කෙටි -(-3//2)බයිට් 8 ක් භාවිතා කළ හැකිය .

math.floor(n)   : 13 bytes+12 for import
n//1            : 4  bytes

math.ceil(n)    : 12 bytes+12 for import
-(-n//1)        : 8  bytes

5
මෙය මට බයිට් 20 කට ආසන්න ප්‍රමාණයක් ඉතිරි කළේය, ස්තූතියි!
මෝගන් ත්‍රැප්

1
සමහර විට ඔබට n//1+1සිවිලිම වෙනුවට පැන යා හැකි නමුත් එයින් අදහස් කරන්නේ සිවිලිම (n) = n + 1 නමුත් එය සියලු පූර්ණ නොවන අගයන් සඳහා ක්‍රියා කළ යුතුය
fejfo

round(x)යනු (x+.5)//1+1 බයිට් වන නමුත් දෙවැන්න ආරම්භ වන්නේ a සමඟ වන අතර නියතයකින් සමන්විත එකතුවක් (නම් xඑය ප්‍රයෝජනවත් වේ.
user202729

27

අයිතම 4 ක් දක්වා වූ ලූප පරාසය භාවිතා කිරීම වෙනුවට ටුපල් එකක් සැපයීම වඩා හොඳ විය හැකිය

for x in 0,1,2:

එදිරිව

for x in range(3):

27

කොන්දේසියක් මත පදනම්ව අංක දෙකෙන් එකක් තෝරා ගැනීම

තෘතීය ප්‍රකාශනය සඳහා බූලියන් සමඟ ලැයිස්තු තේරීම භාවිතා කිරීමට ඔබ දැනටමත් දන්නවා . විචල්යයන් , සහ ද යන දෙකම බවයි සටහන් වුවද, ප්රකාශන විය හැකි සහ තෝරා ගෙන නොමැති විට පවා ඇගයීමට ලක් කර ඇත.[x,y][b]by if b else xxybxy

ඉලක්කම් ඇති විට xසහ විය හැකි විභව ප්‍රශස්තිකරණ කිහිපයක් මෙන්න y.

  • [0,y][b] -> y*b
  • [1,y][b] -> y**b
  • [x,1][b] -> b or x
  • [x,x+1][b] -> x+b
  • [x,x-1][b] -> x-b
  • [1,-1][b] -> 1|-b
  • [x,~x][b] -> x^-b
  • [x,y][b] -> x+z*b(හෝ y-z*b), එහිදී z = yx.

ඔබ ද මාරු කළ හැකිය xසහ yඔබ සකස්කල හැකි නම් bඒ වෙනුවට එහි නිශේධනය විය.


25

වෙනස් කරන්න import * කරන්නimport*


ඔබ අසා නොමැති නම්, import* අක්ෂර සුරකිනු ඇත!

from math import*

වඩා අක්ෂර 1 ක් පමණි import math as m අතර ඔබට සියලු අවස්ථා ඉවත් කිරීමට සිදුවේm.

එක් වරක් භාවිතා කිරීම පවා ඉතිරි කරන්නෙකි!


25

PEP448 - අතිරේක ඉවත් කිරීමේ සාමාන්‍යකරණයන්

මුදා හැරීමත් සමඟ පයිතන් 3.5 , ලැයිස්තු, ටුපල්, කට්ටල සහ අණපනත් හැසිරවීම ගොල්ෆ් ක්‍රීඩකයෙකු බවට පත්විය.

නැවත සැකසිය හැකි කට්ටලයක් / ලැයිස්තුවක් බවට පත් කිරීම

යුගල සසඳා බලන්න:

set(T)
{*T}

list(T)
[*T]

tuple(T)
(*T,)

වඩා කෙටි! කෙසේ වෙතත්, ඔබට යමක් ලැයිස්තුවකට පරිවර්තනය කර විචල්‍යයකට පැවරීමට අවශ්‍ය නම්, සාමාන්‍ය විස්තාරණය කළ හැකි ඉවත් කිරීම කෙටි වේ:

L=[*T]
*L,=T

ඒ හා සමාන සින්ටැක්ස් ටුපල් සඳහා ක්‍රියා කරයි:

T=*L,

එය දිගු කළ හැකි නැවත මුදා හැරීම වැනි ය, නමුත් අනෙක් පැත්තෙන් තරු හා කොමාව සමඟ.

ලැයිස්තු / ටුපල් සමඟ සම්බන්ධ වීම

දෙපැත්තටම ලැයිස්තුවක් / ටුපල් එකක් එකතු කිරීමට අවශ්‍ය නම්, ඇසුරුම් කිරීම සංයුක්තතාවයට වඩා මඳක් කෙටි ය:

[1]+T+[2]
[1,*T,2]

(1,)+T+(2,)
(1,*T,2)

බහු ලැයිස්තු වල අන්තර්ගතය මුද්‍රණය කිරීම

මෙය සීමා නොවේ print, නමුත් එය සැතපුම් ගණනක් පැමිණෙන්නේ නියත වශයෙන්ම ය. PEP448 දැන් බහුවිධ ඇසුරුම් කිරීමට ඉඩ දෙයි, වැනි:

>>> T = (1, 2, 3)
>>> L = [4, 5, 6]
>>> print(*T,*L)
1 2 3 4 5 6

බහු ශබ්ද කෝෂ අයිතම යාවත්කාලීන කිරීම

මෙය බොහෝ විට සිදු නොවනු ඇත, නමුත් ඔබ අවම වශයෙන් අයිතම තුනක් වත් යාවත්කාලීන කරන්නේ නම් ශබ්දකෝෂ යාවත්කාලීන කිරීමේදී ඉතිරි කිරීමට සින්ටැක්ස් භාවිතා කළ හැකිය:

d[0]=1;d[1]=3;d[2]=5
d={**d,0:1,1:3,2:5}

මෙය මූලික වශයෙන් ඕනෑම අවශ්‍යතාවයක් ප්‍රතික්ෂේප කරයි dict.update.


6
මෙය පර්ල්ට වඩා නරක යැයි පෙනේ, නමුත් එය ක්‍රියාත්මක වේ ...
මෙගා මෑන්

24

සහ +=වෙනුවට භාවිතා කරන්නappendextend

A.append(B)  

කෙටි කළ හැක්කේ:

A+=B,

B,මෙහි දීර්ඝ කිරීමට භාවිතා කළ හැකි එක් අංගයක් tuple නිර්මාණය Aවගේ [B]තුළ A+=[B].


A.extend(B)

කෙටි කළ හැක්කේ:

A+=B

5
බොහෝ (නමුත් සියල්ලම නොවේ), return 0හෝ return 1සමාන return Falseහෝ return True.
භූගත මොනෝරේල්

5
(1) ක්‍රියාත්මක වන්නේ අංකය negative ණ බව ඔබ දැනටමත් දන්නේ නම් පමණි, එම අවස්ථාවේදී ඔබට අවම අක්ෂර 2 ක් us ණ ලකුණක් භාවිතා කිරීමෙන් සුරැකිය හැක. -xවෙනුවට x*-1. --8.32වෙනුවට -8.32*-1. නැත්නම් 8.32...
ට්‍රයිකොප්ලැක්ස්

OP උපුටා දැක්වීම: කරුණාකර පිළිතුරකට එක් ඉඟියක් පළ කරන්න.
nyuszika7h

තුළ A+=B Ba බව සලකන්න tuple.
එරික් ද Outgolfer

21

දිග වෙළඳාම පිළිබඳ සඳහන

දේවල් කිරීමේ පොදු විකල්ප ක්‍රම සඳහා චරිත ගණනය කිරීමේ වෙනස්කම් සඳහා යොමු කිරීමක් ප්‍රයෝජනවත් වනු ඇතැයි මම සිතමි, එවිට ඒවා භාවිතා කළ යුත්තේ කවදාදැයි මට දැනගත හැකිය. _ප්‍රකාශනයක් හෝ කේතයක් දැක්වීමට මම භාවිතා කරමි .

විචල්යයකට අනුයුක්ත කරන්න: +4

x=_;x
_

ඉතින්, ඔබ පවා මෙය කැඩී යයි

  • _දෙවන වරට භාවිතා කරන්න :_ දිග 5 ඇත
  • _තෙවන වර භාවිතා කරන්න : _දිග 3 ඇත

විචල්යයන් වෙන වෙනම පවරන්න: 0

x,y=a,b
x=a;y=b
  • -2 සඳහා aසමාන වන විටbx=y=a

lambdaක්‍රියාකාරීත්වයට පුළුල් කරන්න def: +7

lambda x:_
def f(x):return _
  • -2 නම් කරන ලද කාර්යයන් සඳහා
  • -1 නම් _ වමට ස්පර්ශ කළ හැකි
  • -1 හැකි නම් පයිතන් 2 හි printනැවත පැමිණීමට වඩා
  • තරු ලකුණු කළ ආදානය සඳහා +1 *x

සාමාන්‍යයෙන්, ඔබ defප්‍රකාශනයක් දෙවරක් භාවිතා කරන විචල්‍යයකට සුරැකීමට නම්, ප්‍රකාශනය දිග 12 ක් වුවද මෙය කැඩී යයි.

lambda x:g(123456789012,123456789012)
def f(x):s=123456789012;return g(s,s)

ක්‍රියාකාරීත්වයට වඩා STDIN: +1

def f(x):_;print s
x=input();_;print s
  • _තනි පේළියක් නොවන්නේ නම් අවශ්‍ය වන කේත රේඛාව සඳහා -1
  • raw_inputපයිතන් 2 හි අවශ්‍ය නම් +4
  • -4 යනු ආදාන විචල්‍යය භාවිතා කරනුයේ එක් වරක් පමණි
  • පයිතන් 2 returnට වඩා ශ්‍රිතය අවශ්‍ය නම් +1 කරන්නprint

පෙරළීමට execවඩා භාවිතා කරන්න range(n): +0

for i in range(n):_
i=0;exec"_;i+=1;"*n
  • පයිතන් 3 සඳහා +2 exec()
  • -4 range(c,c+n)තනි වරහන සඳහා පරාසය මාරු කළහොත්c
  • -5 සිට ආපස්සට යන විට nකිරීමට 1හරහාrange(n,0,-1)

mapපුඩුවක් තුළ අතින් යොදන්න : +0

for x in l:y=f(x);_
for y in map(f,l):_

mapලැයිස්තු අවබෝධය තුළ අතින් යොදන්න : +8

map(f,l)
[f(x)for x in l]
  • -12 කවදාද ප්‍රකාශනය ලෙස fලිවිය යුතු අතර එමඟින් සමස්ත වර්‍ග 4 ක් අහිමි වේ.maplambdalambda x:f(x)

filterලැයිස්තු අවබෝධය තුළ අතින් යොදන්න : +11

filter(f,l)
[x for x in l if f(x)]
  • -1 f(x)ප්‍රකාශනයට වම් පැත්තට ස්පර්ශ කළ හැකි නම්
  • -12 කවදාද ප්‍රකාශනය ලෙස fලිවිය යුතු අතර එය සමස්ත වර්‍ග 1 ක් අහිමි වේ.filterlambdalambda x:f(x)

ආනයනය * එදිරිව ආනයන තනි භාවිතයට: +4

import _;_.f
from _ import*;f
  • _5 දිග ඇති විට පවා කැඩී යයි
  • import _ as x;x.f බහු ආනයන හැර සෑම විටම නරක ය
  • __import__('_').f එය වඩාත් නරක ය

යෝජනා සහ නිවැරදි කිරීම් සඳහා @ Sp3000 ට ස්තූතියි.


2
ඔබට දර්ශකය අවශ්‍ය නොවේ නම් "exec" බිට් -9 යයි.
ටී. වෙරෝන්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.