পাইথনে গল্ফ করার টিপস


248

পাইথনে গল্ফ করার জন্য আপনার কাছে কোন সাধারণ টিপস রয়েছে? আমি এমন ধারণাগুলি সন্ধান করছি যা কোড-গল্ফ সমস্যার ক্ষেত্রে প্রয়োগ করা যেতে পারে এবং যা পাইথনের ক্ষেত্রেও অন্তত কিছুটা নির্দিষ্ট (যেমন "মন্তব্যগুলি সরান" কোনও উত্তর নয়))

দয়া করে উত্তর প্রতি একটি টিপ পোস্ট করুন।


27
ওহ, আমি প্রতিটি ভাষার জন্য এই জাতীয় প্রশ্নের মতো একটি সম্পূর্ণ সেট দেখতে পাচ্ছি ...
আর মার্টিনহো ফার্নান্দেস

4
@ মার্থিনহো আমি সম্মত সবেমাত্র একটি সি ++ সমতুল্য শুরু করেছেন । যদিও আমি এটির খারাপ জিনিস মনে করি না, যতক্ষণ না আমরা একই উত্তরগুলি দেখতে পাচ্ছি না যতক্ষণ না এই প্রশ্নাবলীর বেশিরভাগ অংশে আবার পোস্ট করা হয়।
মার্জোগ

50
প্রশ্নটি ভালবাসুন তবে আমাকে নিজেকে বলতে হবে "এটি কেবল মজাদার জন্য উত্পাদন কোড নয়"
গ্রেগ গুইডা

2
এই প্রশ্নটি কোনও সম্প্রদায়ের উইকি পোস্ট হওয়া উচিত নয়?
dorukayhan

3
@ ডোরুকায়হান নোপ; এটি সিজি'র উদ্দেশ্যে অজগর কোডটি সংক্ষিপ্ত করার বিষয়ে টিপসের জন্য জিজ্ঞাসা করে একটি বৈধ কোড-গল্ফ টিপসের প্রশ্ন । এই জাতীয় প্রশ্নগুলি সাইটের জন্য পুরোপুরি বৈধ, এবং এই ট্যাগগুলির মধ্যে কোনওটিই স্পষ্টভাবে বলে না যে প্রশ্নটি সিডব্লিউড হওয়া উচিত, এসও এর বিপরীতে, যার জন্য সিজি চ্যালেঞ্জগুলি সিডব্লিউড হওয়া দরকার। এছাড়াও, একটি ভাল উত্তর লেখার জন্য, এবং এই জাতীয় টিপস সন্ধান করা সর্বদা কোনও কিছুর জন্য প্রাপ্য that
এরিক আউটগলফার

উত্তর:


152

a=b=c=0পরিবর্তে ব্যবহার করুন a,b,c=0,0,0

a,b,c='123'পরিবর্তে ব্যবহার করুন a,b,c='1','2','3'


2
এটি সাধারণভাবে দুর্দান্ত টিপ :)

28
মনে রাখবেন যে এটি স্থানান্তরিত অবজেক্টগুলি সংজ্ঞা দেওয়ার জন্য অগত্যা কাজ করবে না। a = b = [1] আসলে একটি = [1] থেকে পৃথক; খ = [1]
isaacg

6
প্রথম টিপ সম্পর্কে মজার বিষয় হ'ল এটি জাভাতেও কাজ করে।
জাস্টিন

1
@ জাস্টিন হ্যাঁ, তবে কেবল প্রাথমিক প্রকারের সাথে
হাইপারনিউটারিনো

11
তবে কখনই a = b = c = [] বা কোনও অবজেক্ট ইনস্ট্যান্সেশন ব্যবহার করা হবে না কারণ সমস্ত ভেরিয়েবল একই উদাহরণটিতে নির্দেশ করবে। এটি সম্ভবত আপনি চান না।
পিএইচই

146

শর্তগুলি দীর্ঘ হতে পারে। কিছু ক্ষেত্রে, আপনি এর সাথে একটি সাধারণ শর্তযুক্ত প্রতিস্থাপন করতে পারেন (a,b)[condition]। যদি conditionসত্য হয়, তবে bফিরে আসবে।

তুলনা করা

if a<b:return a
else:return b

এই

return(b,a)[a<b]

37
এগুলি হুবহু এক নয়। প্রথমটি কেবল ফিরে পাওয়া এক্সপ্রেশনকে মূল্যায়ন করে যখন দ্বিতীয়টি সর্বদা তাদের উভয়কেই মূল্যায়ন করে। এইগুলি শর্ট সার্কিট করে: a if a<b else bএবংa<b and a or b
মেরিনাস

3
(lambda(): b, lambda(): a)[a < b]()ল্যাম্বডাস দিয়ে আপনার নিজের শর্ট সার্কিট তৈরি করুন
মিং-টাং

3
@ মারিনাস, তারা সমান নয়: P and A or Bযে কোনও এ দেয় তার জন্য কেবল বিবেচনা করুন bool(A)=False। তবে (P and [A] or [B])[0]কাজটি করবে। রেফারেন্সের জন্য ডাইভেন্টিপথন.ন.পাওয়ার_ফৌ_সাইন্ট্রোস্পেকশন / এবং_অরHtml দেখুন ।
কেগ্রাডেক

6
ল্যাম্বডাস শর্তসাপেক্ষ প্রকাশের চেয়ে দীর্ঘ।
ব্যবহারকারী 2357112

18
@ ব্যবহারকারী 2357112 আপনি তাদের ব্যবহার করার সময় তারা আপনাকে এত শীতল দেখায়। :]
চেজ রেস

117

একটি দুর্দান্ত কাজ আমি একবার করেছিলাম:

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
কেটলার

4
প্রতিসম প্রতি ভালবাসা। $ A এবং $ বি এর মিনিট সন্ধানের জন্য আমাকে পুরানো পার্ল গল্ফ ট্রিকের কথা মনে করিয়ে দেয়: [$a => $b]->[$b <= $a]:)
সাইমন হুইটেকার

মনে রাখবেন যে দ্বিতীয় উদাহরণ (কোনও তালিকা নেই) এর সাথেও করা যেতে পারেif(a<b)+(c>d):foo()
ওয়ার্ল্ডসেন্ডার

6
+ হওয়া উচিত *। একটি orহবে+
ওয়ার্ল্ডসেন্ডার


103

যদি আপনি অন্তর্নির্মিত ফাংশনটি বারবার ব্যবহার করেন তবে বিভিন্ন যুক্তি ব্যবহার করে এটির নতুন নাম দেওয়া আরও স্থান-দক্ষ হতে পারে:

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

6
যদিও আসলে কোনও বাইট সংরক্ষণ করেনি।
ব্যবহারকারী 2357112

4
r = পরিসর এবং অন্যান্য দুটি আর এর 9 টি অক্ষর; দুবার ব্যাপ্তি ব্যবহার করা 10 টি অক্ষর। এই উদাহরণে একটি বিশাল সঞ্চয় নয়, তবে তা গুরুত্বপূর্ণ পরিমাণের সংরক্ষণের জন্য পরিসরের আরও একটি ব্যবহার।
ফ্র্যাঙ্ক

13
@ ফ্র্যাঙ্ক অতিরিক্ত নিউলাইনটি অন্য একটি চরিত্র।
L3viathan

2
প্রকৃতপক্ষে দুটি পুনরাবৃত্তি পাঁচটি ফাংশন নামের দৈর্ঘ্যে সংরক্ষণ করতে খুব কম। আপনার প্রয়োজন: দৈর্ঘ্য 2: 6 reps, দৈর্ঘ্য 3: 4 reps, দৈর্ঘ্য 4 বা 5: 3 reps, দৈর্ঘ্য> = 6: 2 reps। একে (দৈর্ঘ্য -১) * (reps-1)> 4।
janrjan জোহানসেন

দ্রষ্টব্য এটি প্রথম শ্রেণীর ফাংশন সহ সমস্ত ভাষার ক্ষেত্রে প্রযোজ্য।
এফফটেন

94

কখনও কখনও আপনার পাইথন কোডে আপনার 2 স্তরের ইন্ডেন্টেশন থাকা প্রয়োজন। সুস্পষ্ট কাজটি হ'ল প্রতিটি ইনডেন্টেশন স্তরের জন্য এক এবং দুটি স্পেস ব্যবহার।

তবে পাইথন 2 ট্যাব এবং স্পেস অক্ষরগুলিকে আলাদা করে ইনডেন্টিং স্তর হিসাবে বিবেচনা করে।

এর অর্থ প্রথম ইন্ডেন্টেশন স্তরটি একটি স্থান এবং দ্বিতীয়টি একটি ট্যাব অক্ষর হতে পারে।

উদাহরণ স্বরূপ:

if 1:
 if 1:
\tpass

\tট্যাব চরিত্রটি কোথায় ।


1
শীতল, আমি এই এক সম্পর্কে চিন্তা না!
জুলুস ওলান

97
এটি পাইথন 3 এ ব্যর্থ হয়: আপনি আর স্পেস এবং ট্যাবগুলিকে মিশ্রিত করতে পারবেন না (কোডগল্ফের জন্য একটি খারাপ জিনিস, তবে অন্য সমস্ত ক্ষেত্রে একটি ভাল জিনিস)।
বাকুরিউ

1
অজগর 3.4 এ এটি দুর্দান্ত কাজ করে বলে মনে হচ্ছে।
ট্রাইকপ্লেক্স

3
@ ট্রাইকোপ্লেক্স , অজগর 3.4.3 এ আমি পেয়েছিTabError: inconsistent use of tabs and spaces in indentation.
সিলিংক্যাট

রেফারেন্সের জন্য, একটি ট্যাবটির 8 টি স্পেসের মূল্য রয়েছে।
এরিক দি আউটগল্ফার

87

স্ট্রিং প্রতিস্থাপন ব্যবহার করুন এবং এর 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এর occurences 'lambda ', এবং sবাইট দীর্ঘ। তারপর:

  • plainবিকল্প sবাইট দীর্ঘ।
  • replaceবিকল্প s - 6n + 29বাইট দীর্ঘ।
  • %বিকল্প s - 5n + 22 + len(str(n))বাইট দীর্ঘ।

এই তিনটি বিকল্পের জন্য সংরক্ষণ করা বাইটের প্লটplain থেকে আমরা দেখতে পাচ্ছি:

  • জন্য এন <5 lambdas, আপনি সব সময়ে কিছু অভিনব করছেন না ভাল আছেন।
  • জন্য এন = 5 লেখা exec"..."%(('lambda ',)*5)2 বাইট সংরক্ষণ করে, এবং আপনার সেরা বিকল্প।
  • জন্য এন> 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:(দৈর্ঘ্য 11) আপনার কোডটিতে 3 বার ঘটে, আপনি লেখার চেয়ে ভাল exec"..."%(('lambda x,y:',)*3)


4
এটি আরও ভোট পেতে হবে, এটি একটি খুব দরকারী পরামর্শ।
বিগব্লিন্ড

7
এটি অত্যন্ত বিরল যে এটি কাজ করে। এর ব্যয়টি replaceবিশাল।
বুথবি

4
এটি যখন কাজ করে তবে এটি অনেক সাহায্য করে।
আন্ডারগ্রাউন্ডোমোনাইল 8

আকর্ষণীয়, এমনকি এই সম্পর্কে tgought কখনও!
ক্লদিউ

পাইথনের বাইরে আমার ভাষায় ল্যাম্বডায় একটি নতুন অপারেটর যুক্ত করেছি: =>এটি কেবল স্ট্রিং = lambda । উদাহরণস্বরূপ, f=>:0হবে f = lambda: 0
নন ইনি এখানে

78

অনেকের মধ্যে একটি স্ট্রিং নির্বাচন করতে বর্ধিত টুকরা ব্যবহার করুন

>>> 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
@ ম্যাটেন উলহাক, এর বিভিন্ন মান কীভাবে xরেন্ডার করা যায় তার একটি উদাহরণ মাত্র । গল্ফযুক্ত অংশটি "fbboaaorz"[x::3]বনাম হ'ল মানটি ["foo","bar","baz"][x]কীভাবে xউত্পন্ন হয় তা আপনার গল্ফ সমাধানের আরও একটি অংশ হতে পারে।
gnibbler

72

ব্যবহার করুন `n`ব্যবহারের পরিবর্তে একটি স্ট্রিং একটি পূর্ণসংখ্যা রূপান্তর করতে str(n):

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

38
দুর্দান্ত, তবে পাইথন 3 নিয়ে কাজ করে না।
আলেকজান্দ্রু

2
মনোযোগ দিন: উদাহরণস্বরূপ স্ট্রিংয়ের জন্য নয়, প্রকৃতপক্ষে পূর্ণসংখ্যার জন্য কাজ করে।
নাকিলন

41
BTW। r rep রেপ্রের জন্য সংক্ষিপ্ত
আলেকজান্দ্রু

9
-2 ** 31 এর চেয়ে ছোট বা 2 ** 31-1 (লংস) এর চেয়ে বড় সংখ্যার শেষে 'এল' পাওয়া যায়।
হলভাবো

6
এটি সম্পূর্ণ নির্ভুলতায় ফ্লোটগুলি মুদ্রণ করতেও ব্যবহার করা যেতে পারে
gnibbler

69

ম্যাজিক সংখ্যা হিসাবে সারণী অনুসন্ধান করুন

বলুন যে আপনি বুলিয়ান লুক টেবিলটিকে হার্ডকোড করতে চান, যেমন প্রথম বারোটি ইংলিশ সংখ্যার মধ্যে একটি রয়েছে 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

ফলস্বরূপ 0বা 1সমান হওয়ার Falseসাথে True

ধারণাটি হল যে ম্যাজিক নম্বরটি টেবিলটিকে বিটস্ট্রিং bin(3714)= হিসাবে সঞ্চয় করে 0b111010000010, nতৃতীয় অঙ্কের (শেষ থেকে) nতম সারণীর এন্ট্রির সাথে সম্পর্কিত। আমরা nডানদিকে সংখ্যা nফাঁকা স্থানটি বিট করে এবং শেষ সংখ্যাটি দ্বারা নিয়ে প্রবেশ করি &1

এই স্টোরেজ পদ্ধতিটি খুব দক্ষ। বিকল্পগুলির সাথে তুলনা করুন

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

আপনার মতো আপনার সন্ধানের টেবিল স্টোর মাল্টিবিট এন্ট্রি থাকতে পারে like

 340954054>>4*n&15

সম্পর্কিত চার বিট ব্লক নিষ্কাশন করতে।


আমরা কি চার-বিট ব্লকের উদাহরণস্বরূপ ফলাফল পেতে পারি? আপনি কি এন-বিট ব্লকের জন্য কোনও নিয়ম ব্যবহার করেছেন?
জেরোজেজে

8
হেক্স কখনও কখনও আরও ছোট হতে পারে।
জুনাজান

4
এটি অনেক ভাষার জন্য কার্যকর।
সাইয়েস

1
@ জুনাজন হেক্স 999 999 এর চেয়ে বেশি সংখ্যার জন্য ছোট ।
মতিন উলহাক

60

একটিতে দুটি সংখ্যার লুপগুলি সঙ্কুচিত করুন

বলুন আপনি m*nগ্রিডের কক্ষগুলিতে পুনরাবৃত্তি করছেন । দুটি নেস্টেড forলুপগুলির পরিবর্তে , একটি সারিটির জন্য এবং একটি কলামের জন্য, m*nগ্রিডের কোষগুলির উপরে পুনরাবৃত্তি করতে সাধারণত একটি লুপ ব্যবহার করা কম sh আপনি লুপের অভ্যন্তরে ঘরের সারি এবং কলামটি বের করতে পারেন।

আসল কোড:

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কল এবং লুপের অভ্যন্তরে একটি স্তর অন্তর্ভুক্ত করেছেন। পুনরাবৃত্তির ক্রমটি অপরিবর্তিত।

ব্যবহার করুন //পরিবর্তে /পাইথন 3. আপনি পড়ুন তাহলে iএবং jঅনেক বার, এটি তাদের মান দায়িত্ব অর্পণ করা দ্রুততর হতে পারে i=k/n, j=k%nলুপ ভিতরে।


5
এটা সত্যিই দারুন. আমি বুঝতে পারিনি যে এটি সম্ভব!
theonlygusti

আমি এটি জাভাস্ক্রিপ্টের টিপসে দেখেছি। বেশিরভাগ ভাষায় এটি বেশ কার্যকর কৌশল।
সাইয়েস

7
রেফারেন্সের জন্য, এটি 3 টি লুপে প্রসারিত করতে:for i in range(m*n*o): do_stuff(i/n/o,i%(n*o)/o,i%o)
mbomb007

3
জন্য nলুপ: repl.it/EHwa
mbomb007

কিছু ক্ষেত্রে, itertools.productনেস্টেড লুপগুলির চেয়ে অনেক বেশি সংক্ষিপ্ত হতে পারে, বিশেষত কার্টেসিয়ান পণ্য উত্পন্ন করার সময়। a1, a2, b1, b2'ab''12'
হ'ল

54

নিম্নলিখিত টোকেনটি শুরু না হলে eবা দিয়ে E। আপনি একটি নম্বর অনুসরণ করে স্থানটি সরাতে পারেন।

এই ক্ষেত্রে:

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

হয়ে:

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

জটিল এক লাইনের স্টেটমেন্টে এটি ব্যবহার করা বেশ কয়েকটি অক্ষর সংরক্ষণ করতে পারে।

সম্পাদনা: @ মারকগ যেমন উল্লেখ করেছে, 4or aকাজ করবে তবে এটি a or4চলক নামের সাথে বিভ্রান্ত হওয়ার কারণে নয় not


37
if(i,j)==(4,4):এমনকি আরও খাটো এবং এই বিশেষ ক্ষেত্রেif i==j==4:
gnibbler

3
সম্পর্কিত: 4or aকাজ করে, তবে নয়a or4
মার্চগ

17
0orএছাড়াও কাজ করে না ( 0oঅষ্টাল সংখ্যাগুলির একটি উপসর্গ)।
ন্যাব

5
না @Nabb এটি কোন পথে গুরুত্বপূর্ণ, যেহেতু 0 or xসবসময় রিটার্ন করত হয় x। পাশাপাশি কাটা যেতে পারে 0 or
5uʎs

5
0orযদিও একটি দীর্ঘ সংখ্যার অংশ হিসাবে ঠিক আছে। 10 or xসমতূল্য 10or x
ট্রাইকোপলাক্স

53

পূর্ণসংখ্যার জন্য 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

অপারেটার ~এবং ইউনারী -বেশী প্রাধান্য হয় *, /, %, বাইনারি অসদৃশ +


11
এই কৌতুকটিতে আমি আজ পাল্টে গেলাম: -~-xএকটি বাইট বনাম সংরক্ষণ করে (1-x)
লিন

4
আরও একটি দরকারী অ্যাপ্লিকেশন হ'ল a+b+1আরও সংক্ষিপ্তভাবে হিসাবে লেখা যেতে পারে a-~b
স্ট্রাইকয়েডস

এবং n-i-1ঠিক আছে n+~i
রুহোলা

51

পাইথন 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কে একটি সেগফোল্ট দিয়ে ক্র্যাশ করুন :(
দানিরো

পছন্দ করুন শুধুমাত্র ইন্টারেক্টিভ কনসোলে? খুব অদ্ভুত লাগছে। এটি একটি ক্লিন কনসোলে চেষ্টা করুন বা বাগটি রিপোর্ট করুন
জবার্নার্ডো

1
আমার পাইথন ৩.৫ ভাল কাজ করে।
NoOneIsHere

আমি = (x এর ** 2 সীমার মধ্যে x এর জন্য (5)) আমি এই কোড <জেনারেটরের বস্তুর <genexpr> 0x03321690 এ> ফিরে পেতে
জর্জ

7
এবং আপনি যদি কোনও অভিব্যক্তিতে এটি করছেন তবে আপনি এটি করতে পারেন [*'abcde']
ফলস এসোলং করা

46

পরিবর্তে 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, সুতরাং এই কৌশলটি কেবল তখনই ব্যবহার করা উচিত যখন এটি কোনও বিকল্প নয়।


@ প্রবৃদ্ধসেকিলার আমি মনে করি আপনি যে রেখার অপসারণ করেছেন তার বিন্দুটি হ'ল "স্বরূপ চরিত্রের সঞ্চয় ছাড়াও যেহেতু [1]*8খাটো হয় ততটুকুও range(8)আপনি একটি স্থান সংরক্ষণ করতে পারেন কারণ for i in[...আইনসম্মত থাকাকালীন for i in range..."।
আন্ডারগ্রাউন্ডোমোনাইল

ওহ, ঠিক আছে, আমি এটা বুঝতে পারি না। এখনই ঠিক করা হয়েছে
'30 এ গর্বিত হাসেলেলার

7
exec"pass;"*8উল্লেখযোগ্যভাবে খাটো।
ডিজেএমসিএমহেম

1
যদি r=1, r*88 হয় এবং আপনি কোনও সংখ্যার মাধ্যমে পুনরাবৃত্তি করতে পারবেন না। আমার ধারণা আপনি বোঝাতে চেয়েছিলেনr=[1]
আর্টেমিস ফাউল

1
@ আর্টেমিসফাউল, ঠিক যেমনটি ঠিক নেই, 1 এর পরে কমা একটি দ্বৈত তৈরি করে যা পুনরাবৃত্ত হয়।
সাশা

43

ক্রমগুলি বিপরীত করতে আপনি ভাল পুরানো এলিয়েন স্মাইলি মুখ ব্যবহার করতে পারেন:

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

38

বর্ধিত পুনরাবৃত্তযোগ্য আনপ্যাকিং ("তারকাচিহ্নিত অ্যাসাইনমেন্ট", পাইথন 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()। ফলাফলটি একটি ভিন্ন তালিকায়ও সংরক্ষণ করা যায়।

টিপস @grc এর সৌজন্যে


কি দারুন! a=1;L=[]অনেকবার লিখেছি । এটি আশ্চর্যজনক যে আপনি এর মতো সোজা কিছুতে অক্ষর সংরক্ষণ করতে পারেন।
xnor

@ এক্সনর এটি জিআরসি-র ধন্যবাদ। শুধুমাত্র একটি অন্য উপাদান দিয়ে এটি ভাল ( a,*L=1,) হিসাবে ভাল নয় , তবে এটি এখনও একটি চর সংরক্ষণ করে :)
Sp3000

ভুলে যাবেন না যে আপনি তালিকাটির প্রথম এবং শেষ উভয় উপাদানটি পেতে পারেনa,*_,b=L
সাইয়েস

36

পাইথন 2.7 এ আক্ষরিক সেট করুন

আপনি S={1,2,3}এটির মতো সেট লিখতে পারেন এর অর্থ এটি আপনি একটি অক্ষর সংরক্ষণ করে {e}&Sতার পরিবর্তে সদস্যতা পরীক্ষা করতে পারেন e in S


4
ifকোনও স্থান নেই বলে এটি if{e}&S:
অক্ষরেও

1
নোট করুন যে আপনি সেই কৌশলটি not inদ্বারা প্রতিস্থাপন করতে পারেন{e}-S
ব্ল্যাক আউল কাই

35

যুগে যুগে এটি আমাকে বিরক্ত করেছিল যে পুরো বর্ণমালা পাওয়ার জন্য আমি কোনও ছোট উপায়ের কথা ভাবতে পারি না। আপনি যদি আপনার প্রোগ্রামে থাকা rangeযথেষ্ট পরিমাণে ব্যবহার করেন R=rangeতবে তা

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

নিষ্পাপের চেয়ে খাটো

'abcdefghijklmnopqrstuvwxyz'

তবে অন্যথায় এটি একক চরিত্রের দ্বারা দীর্ঘতর। এটি আমার ভুতুড়েছিল যে চতুর যে আসকি মান সম্পর্কে কিছু জ্ঞান প্রয়োজন কেবল সমস্ত অক্ষর টাইপ করার চেয়ে আরও ভার্জিক হয়ে গেছে।

আমি আমার কন্যার বর্ণমালার জন্য এই উত্তরটি না দেখছি । আমি সম্পাদনার ইতিহাসটি যথাযথভাবে অনুসরণ করতে পারি না যে এই প্রতিভাটি ওপি-র কাজ ছিল বা এটি কোনও মন্তব্যকারীর পরামর্শ ছিল তবে এটি (আমি বিশ্বাস করি) ২ letters টি বর্ণের পুনরাবৃত্তি তৈরির সংক্ষিপ্ততম উপায় রোমান বর্ণমালায়

map(chr,range(97,123))

যদি বিষয়টি বিবেচনা না করে তবে আপনি বড় হাতের অক্ষর ব্যবহার করে অন্য একটি চরিত্র ছিন্ন করতে পারেন:

map(chr,range(65,91))

আমি mapখুব বেশি উপায়ে ব্যবহার করি , আমি জানি না যে এটি কখনই আমার কাছে ঘটেনি।


4
প্রকৃত কোডিংয়ে এটি ব্যবহার করতে পারে, এই জিনিসগুলিকে হার্ডকোড করার সময় আমি খুব বোকা বোধ করি: ')
টুনআলফ্রিংক

37
প্রকৃত কোডিংয়ে, ব্যবহার করুন string.lowercase- এটি এখানে রয়েছে।
কেভিন এস

1
যদি আপনার উভয় ক্ষেত্রেই প্রয়োজন হয় তবে আমি জানি যে সবচেয়ে সংক্ষিপ্ততম উপায়টি হল ফিল্টার (স্ট্রিসালফা, মানচিত্র (ক্রিয়াকলাপ, পরিসর (256%))। S + = মানচিত্র (str.lower, এস); এটা ঠিক সবে গুলি = মানচিত্র (chr, মধ্যে পরিসীমা (256)) চেয়ে খাটো এর
quintopia

@ কুইন্টোপিয়া: 122 ( ord('z')) এর পরিবর্তে 256 কেন ? এটি একই দৈর্ঘ্য ছাড়াও ... এছাড়াও, আপনার যদি আলফানিউমারিকস প্রয়োজন হয় str.isalphaতবে এর সাথে @ কুইন্টোপিয়ার সংস্করণটি প্রতিস্থাপন করুন str.isalnum। (তবে আপনার যদি কেবল একটি ক্ষেত্রে প্রয়োজন হয় তবে পুরো ৩--চরিত্রের স্ট্রিং আর বেশি নয় filter(str.isalnum,map(chr,range(90)))))
টিম পেডেরিক

2
আপনি যদি অন্যায্য হতে এবং এর মতো পরিসীমা ব্যবহার করতে চলেছেন তবে Rআমার সংস্করণটি আপনার আসল সংস্করণটির চেয়ে কম হবে: '%c'*26%tuple(R(97,123))(কেবলমাত্র 24 টি অক্ষর) আপনি যদি বানান rangeকরেন তবে এটি বর্ণমালা - বড় হাতের সংস্করণটি যত দীর্ঘ হবে
JBernardo

32

যদিও অজগরটির সুইচ স্টেটমেন্ট না থাকলেও আপনি এগুলি অভিধান সহ অনুকরণ করতে পারেন। উদাহরণস্বরূপ, আপনি যদি এটির মতো স্যুইচ চান:

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
হালোসগোস্ট

1
যদিও প্রথম উদাহরণে সংখ্যাযুক্ত কীগুলির সাথে অভিধান ব্যবহার করার পরিবর্তে আপনার কেবল একটি তালিকা ব্যবহার করা উচিত
সাইয়েস

1
আপনার যদি কী হিসাবে স্ট্রিং থাকে, 2 * n-4 বাইটের dict(s1=v1,s2=v2,...,sn=vn)পরিবর্তে ব্যবহার করে {'s1':v1,'s2':v2,...,'sn':vn}এবং n> = 3
কালো আউল কাই

31

যখন আপনার দুটি বুলিয়ান মান রয়েছে aএবং bআপনি যদি উভয় aএবং bসত্য হয় তা সন্ধান করতে চান তবে এর *পরিবর্তে ব্যবহার করুন and:

if a and b: #7 chars

বনাম

if a*b: #3 chars

যদি উভয়ই মান মিথ্যা হয় তবে এটি 0বিবৃতি হিসাবে মূল্যায়ন করবে এবং একটি পূর্ণসংখ্যা মানটি যদি সত্য হয় তবে এটি ননজারো।


9
অথবা আপনি কি ব্যবহার করতে পারে &: a=b=False,a&b
ɐɔıʇǝɥʇuʎs

3
ব্যবহার +জন্য orআপনি নিশ্চিত করতে পারে নাa != -b
undergroundmonorail

2
|সব পরিস্থিতিতে কাজ করে।
ক্যালকুলেটরলাইন

1
*পরিবর্তে and/ &&বিভিন্ন ভাষায় কিছু বাইট সংরক্ষণ করে।
wastl

26

পাইথন 2 স্ট্রিংয়ের উপস্থাপনা ব্যবহার করুন

পাইথন 2 আপনাকে কেবলমাত্র দুটি অক্ষরের ব্যয়ে কোনও বস্তুকে xতার স্ট্রিং উপস্থাপনায় রূপান্তর করতে দেয় `x`। এটি সেই কাজগুলির জন্য ব্যবহার করুন যা বস্তুর নিজের স্ট্রিংয়ের চেয়ে অবজেক্টের স্ট্রিংয়ের চেয়ে সহজ হয়ে যায়।

অক্ষরগুলিতে যোগদান করুন

অক্ষরের একটি তালিকা দেওয়া হয়েছে, একটি হিসাবে l=['a','b','c']এটি উত্পাদন করতে পারে , যা একটি বাইট সংরক্ষণ করে।''.join(l)`l`[2::5]

কারণ যে `l`হয় "['a', 'b', 'c']", (ব্যবধান সহ) তাই এক একটি তালিকা ফালি সঙ্গে অক্ষর নিষ্কাশন করতে পারেন, শুরু দ্বিতীয় শূন্য সূচীবদ্ধ চরিত্র a, এবং সেখান থেকে যে পঞ্চম অক্ষর গ্রহণ। এটি মাল্টি-ক্যারেক্টার স্ট্রিংগুলিতে যোগদান করতে বা চরিত্রের মতো চরিত্রগুলিতে যোগদান করতে কাজ করে না '\n'

সংকেত অঙ্ক

একইভাবে, ডিজিটের খালি খালি তালিকার মতো l=[0,3,5], কেউ তাদেরকে স্ট্রিং '035'হিসাবে যুক্ত করতে পারে `l`[1::3]

এটি এমন কিছু করে সংরক্ষণ করে map(str,l)। মনে রাখবেন যে এগুলি অবশ্যই একক অঙ্কের এবং 1.0মেশানো মতো ভাসমান থাকতে পারে না Also এছাড়াও খালি তালিকায় এটি ব্যর্থ হয়, উত্পাদন করছে ]

নেতিবাচক জন্য পরীক্ষা করুন

এখন, একটি নন-স্ট্রিং কাজের জন্য। মনে করুন আপনার কাছে lআসল সংখ্যার একটি তালিকা রয়েছে এবং এটিতে বুলিয়ান তৈরি করে কোনও নেতিবাচক সংখ্যা রয়েছে কিনা তা পরীক্ষা করতে চান।

আপনি করতে পারেন

'-'in`l`

যা স্ট্রিং রেপটিতে নেতিবাচক চিহ্নের জন্য পরীক্ষা করে। এটি উভয়ের চেয়ে ছোট

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

দ্বিতীয়টির জন্য, min(l)<0খালি তালিকায় ব্যর্থ হবে, তাই আপনাকে হেজ করতে হবে।


একক অঙ্কের স্ট্রিং স্লাইসিং প্রতিযোগিতাটি পাইথন 3-তেও কার্যকর, যদিও কম তাই: str(l)[2::5]12 বাইট, 19 এর তুলনায় ''.join(map(str,l))। একটি আসল পরিস্থিতি যেখানে এটি উপস্থিত হয়েছিল (যেখানে lকোনও জেনারেটরের বিবৃতি ছিল, তালিকা নয়) আমাকে কেবল একটি বাইট সংরক্ষণ করেছিল ... যা এখনও মূল্যবান!
টিম পেডারিক

25

লাম্বদা দিয়ে একটি লাইনের ফাংশন করা যেতে পারে:

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

রূপান্তরিত হতে পারে (নোট অনুপস্থিত স্থান 3andএবং 10or)

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

21
বা c=lambda a:a+[-5,10][a<3]। আপনি এবং শর্টকিট আচরণের উপর নির্ভর করে যখন কৌশলটি আরও কার্যকর
Gnibbler

3
আপনার ফাংশনে, ফাংশনটির কার্য সম্পাদন বন্ধ করার সাথে সাথে else: বাদ দেওয়া যেতে পারে return, সুতরাং শর্তটি যদি সত্য হয় তবে উক্ত ifশর্তটি ব্যর্থ হলে কেবলমাত্র কার্যকর করা হবে aka elseসুতরাং elseনিরাপদে বাদ দেওয়া যেতে পারে। (সেখানকার
নিওফাইটদের

সি (-10) -15 ফেরত আসার সময় 0
আনভিট

বাc=lambda a:a-5+15*(a<3)
জেএক্সন

25

4 টি আইটেম পর্যন্ত লুপগুলি ব্যাপ্তি ব্যবহারের পরিবর্তে একটি টিপল সরবরাহ করা ভাল

for x in 0,1,2:

বনাম

for x in range(3):

24

সিল এবং মেঝে

আপনি যদি কখনও বিভাগের জন্য বৃত্তাকার আপ ফলাফল পেতে চান //, আপনি যেমন মেঝে জন্য করতে চান , আপনি 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সিলের পরিবর্তে পালাতে পারেন তবে এর অর্থ সিল (এন) = এন + 1 তবে এটি সমস্ত অ-পূর্ণসংখ্যার মানগুলির জন্য কাজ করা উচিত
fejfo

round(x)হয় (x+.5)//1, +1 বাইট তবে পরবর্তীটি একটি দিয়ে শুরু হয় (এবং যদি xধ্রুবকের সমন্বয়ে যোগফল থাকে তবে এটি কার্যকর হতে পারে।
ব্যবহারকারী 202729

23

এর +=পরিবর্তে appendএবং ব্যবহার করুনextend

A.append(B)  

সংক্ষিপ্ত করা যেতে পারে:

A+=B,

B,এখানে একটি এক-উপাদান tuple যা প্রসারিত করতে ব্যবহার করা যেতে পারে সৃষ্টি Aঠিক [B]মধ্যে A+=[B]


A.extend(B)

সংক্ষিপ্ত করা যেতে পারে:

A+=B

5
অনেক In (কিন্তু সব) ক্ষেত্রে, return 0বা return 1সমতূল্য return Falseবা return True
আন্ডারগ্রাউন্ডোমোনাইল

5
(1) কেবলমাত্র তখনই কাজ করে যদি আপনি ইতিমধ্যে জানেন যে নম্বরটি নেতিবাচক, তবে সেক্ষেত্রে আপনি কেবল একটি বিয়োগ চিহ্ন ব্যবহার করে আরও 2 টি অক্ষর সংরক্ষণ করতে পারেন। -xবরং x*-1--8.32বরং -8.32*-1। বা কেবল 8.32...
ট্রিকোপল্যাক্স

ওপিকে উদ্ধৃত করে: দয়া করে উত্তরের জন্য একটি টিপ পোস্ট করুন।
nyuszika7h

মনে রাখবেন যে, মধ্যে A+=B Bএকটি হল tuple
এরিক আউটগলফার

23

শর্তের ভিত্তিতে দুটি সংখ্যার একটি বেছে নেওয়া Ch

আপনি ইতিমধ্যে বার্নিয়ান এক্সপ্রেশন জন্য [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এর পরিবর্তে পুনরায় লিখতে পারেন তবে।


22

তালিকার পিছন থেকে সূচকে ~ ব্যবহার করুন

যদি Lএকটি তালিকা থাকে তবে পিছন থেকে 'তম উপাদানটি L[~i]পেতে ব্যবহার করুন i

এটি iবিপরীত 'তম উপাদান L। বিট পরিপূরক ~iসমান -i-1, এবং এর থেকে বাই-ওয়ান ত্রুটিটি ঠিক করে L[-i]


21

পিইপি 448 - অতিরিক্ত আনপ্যাকিং সাধারণীকরণ

পাইথন ৩.৩ প্রকাশের সাথে সাথে তালিকাগুলি, টিপলস, সেট এবং ডিক্টসগুলির হেরফের সবেমাত্র গল্ফায়ার পেয়েছে।

কোনও পুনরাবৃত্তিকে সেট / তালিকায় রূপান্তর করা

জোড়া তুলনা করুন:

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, তবে এটি অবশ্যই মাইলেজটির বেশিরভাগ অংশ থেকে আসবে। পিইপি 448 এখন একাধিক আনপ্যাকিংয়ের জন্য যেমন অনুমতি দেয়:

>>> 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
এটি পার্লের চেয়ে খারাপ দেখাচ্ছে, তবে এটি কাজ করে ...
মেগা ম্যান

20

পরিবর্তন import *করুনimport*


আপনি যদি না শুনে থাকেন, import*চরগুলি বাঁচায়!

from math import*

এর চেয়ে মাত্র 1 টি অক্ষর দীর্ঘ import math as mএবং আপনি সমস্ত দৃষ্টান্ত মুছে ফেলতে পারেনm.

এমনকি এক সময় ব্যবহার একটি সেভার!


19
>>> for i in range(x):s+=input()

যদি এর মান আমি অনর্থক:

>>> for i in[0]*x:s+=input()

অথবা

>>> exec's+=input();'*x

8
দ্বিতীয় for i in[0]*x:s+=input()স্থানটি সংরক্ষণ করতে আপনি দ্বিতীয় উদাহরণটি তৈরি করতে পারেন । এছাড়াও, আপনি এক্সিকিউটিভ এবং প্রথম উদ্ধৃতি চিহ্নের মধ্যে স্থানটি সরাতে পারেনexec's+=input();'*x
জাস্টিন পিল

দ্বিতীয় লাইনটি হওয়া উচিত নয়:for i in[0]*x:s+=input()
মাইক্রোথপিক

প্রতারিত (নতুন কিন্তু আরও upvotes)
user202729
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.