میدونید چرا مقادیر داخل Set در پایتون بصورت رندوم قرار میگیرن و ترتیب اضافه کردنشون رعایت نمیشه؟
👍4💩1
TorhamDev | تورهام 😳
میدونید چرا مقادیر داخل Set در پایتون بصورت رندوم قرار میگیرن و ترتیب اضافه کردنشون رعایت نمیشه؟
چرا مقادیر Set در پایتون order رندوم دارن؟
ماجرا رندوم بودن مقادیر در set برمیگرده به اینکه خود Set در پایتون چطور پیاده سازی شده.
پایتون set در حقیقت یک hash table / hash map هستش و دلیل رندوم بودنش هم دقیقا همینه. اما چرا؟
زمانی که شما یکسری مقادیر داخل ست میزارید پایتون اول میاد hash اون مقدار حساب میکنه و بعد از اون نسبت به هش اون مقدار جایی که باید ذخیره بشه رو انتخاب میکنه و اون رو داخل این مکان ذخیره میکنه. به عبارتی:
index = hash_value % array_size
و به خاطر اینکه هش هر مقدار متفاوت به مقادیر دیگست جایی که قرار میگیرن هم متفاوت خواهد بود و در حقیق ترتیب مقادیر شما داخل set مقدار هش اونا % سایز هش تیبلتون و این باعث میشه که هرکدوم در یکجا رندوم قرار بگیرن. اما این رندوم بودن تا یکجایی ثابته
مثال زیر توجه کنید:
my_list = [10, 50, 20, 40, 30]
print(f"Original list: {my_list}")
my_set = set(my_list)
print(f"Set created from list: {my_set}")
my_set.add(60)
my_set.add(5)
print(f"Set after adding elements: {my_set}")
my_list_from_set = list(my_set)
print(f"List created from set: {my_list_from_set}")
خروجی:
Original list: [10, 50, 20, 40, 30]
Set created from list: {40, 10, 50, 20, 30}
Set after adding elements: {5, 40, 10, 50, 20, 60, 30}
List created from set: [5, 40, 10, 50, 20, 60, 30]
همون طور که میبینید در لحظه ساخت set از روی لیستی که داشتیم همچیش رندوم شد و وقتی هم یک مقدار جدید بهش اضافه کردیم order این set تغییر کرد اما وقتی از همون ست مجدد یک لیست ساختیم ترتیب قبلی رعایت شد.
دلیل این ماجرا هم اینه که set هش مقدار رو حساب میکنه و نسبت به اون هش مکانش داخل هش مپ رو تایین میکنه. پس تا زمانی که هش مپ شما resize نشده یا مقدار جدیدی بهش اضافه نشده ترتیب ست شما ثابت خواهد ماند D:
@TorhamDevCH
ماجرا رندوم بودن مقادیر در set برمیگرده به اینکه خود Set در پایتون چطور پیاده سازی شده.
پایتون set در حقیقت یک hash table / hash map هستش و دلیل رندوم بودنش هم دقیقا همینه. اما چرا؟
زمانی که شما یکسری مقادیر داخل ست میزارید پایتون اول میاد hash اون مقدار حساب میکنه و بعد از اون نسبت به هش اون مقدار جایی که باید ذخیره بشه رو انتخاب میکنه و اون رو داخل این مکان ذخیره میکنه. به عبارتی:
index = hash_value % array_size
و به خاطر اینکه هش هر مقدار متفاوت به مقادیر دیگست جایی که قرار میگیرن هم متفاوت خواهد بود و در حقیق ترتیب مقادیر شما داخل set مقدار هش اونا % سایز هش تیبلتون و این باعث میشه که هرکدوم در یکجا رندوم قرار بگیرن. اما این رندوم بودن تا یکجایی ثابته
مثال زیر توجه کنید:
my_list = [10, 50, 20, 40, 30]
print(f"Original list: {my_list}")
my_set = set(my_list)
print(f"Set created from list: {my_set}")
my_set.add(60)
my_set.add(5)
print(f"Set after adding elements: {my_set}")
my_list_from_set = list(my_set)
print(f"List created from set: {my_list_from_set}")
خروجی:
Original list: [10, 50, 20, 40, 30]
Set created from list: {40, 10, 50, 20, 30}
Set after adding elements: {5, 40, 10, 50, 20, 60, 30}
List created from set: [5, 40, 10, 50, 20, 60, 30]
همون طور که میبینید در لحظه ساخت set از روی لیستی که داشتیم همچیش رندوم شد و وقتی هم یک مقدار جدید بهش اضافه کردیم order این set تغییر کرد اما وقتی از همون ست مجدد یک لیست ساختیم ترتیب قبلی رعایت شد.
دلیل این ماجرا هم اینه که set هش مقدار رو حساب میکنه و نسبت به اون هش مکانش داخل هش مپ رو تایین میکنه. پس تا زمانی که هش مپ شما resize نشده یا مقدار جدیدی بهش اضافه نشده ترتیب ست شما ثابت خواهد ماند D:
@TorhamDevCH
👍15❤4
این روزها خوبه از uv استفاده کنید برای پروژههای پایتونی. uv یک پکیج منجیر مشابه بقیه پکیج منجیرا برای مثال poetry,pdm و غیره منتها دوستان Astral ( همونا که Ruff رو نوشتن) توسعه اش دادن با زبان Rust و بسیار سریع هستش.
https://docs.astral.sh/uv/
@TorhamDevCH
https://docs.astral.sh/uv/
@TorhamDevCH
docs.astral.sh
uv
uv is an extremely fast Python package and project manager, written in Rust.
👍13
الگوریتمهای Divide and Conquer چی هستند؟
الگوریتم تقسیم و حل و یا همون Divide and Conquer که به مخفف D&C هم شناخته میشن یک پرادایم الگوریتمی هستند که داخل این پرادایم ما با کوچک کردن مشکل ( problem ) به مشکلات کوچیکتر ( sub-problem ) اونها رو حل میکنیم. از معروفترین الگوریتمهای این پرادایم الگوریتمهای Merge sort و Quick sort هستند. الگوریتمهای D&C معمولا به سورت recursive نوشته میشن.
هر الگوریتم D&C قالبا از ۳ بخش اصلی تشکیل شده:
Divide: در این مرحله الگوریتم مشکل رو به مشکلات ساده تر و کوچیک تر تقسیم میکنه. که مشکلات کوچکتر باید بتونن خودشون به شکل مجزا حل بشند
Conquer: مشکلات کوچیک شده رو به صورت تکرارشوند یا ریکرسیو حل میکنه تا زمانی که مشکل انقدر ساده شده باشه که خودش حل شده محصوب بشه که به این حالت، حالت پایه یا بیسکیس گفته میشه
Combine: در این مرحله ما راه حل تمام مشکلات کوچیک شده ای که حل کردیم رو باهم ادغام میکنیم تا به یک جواب کامل برسیم.
برای مثال الگوریتم Merge sort :
divide: در این مرحله الگوریتم به شکل تکرارشونده لیست ورودی رو به دو تیکه تقسیم میکنه تا زمانی که این لیست حاوی یک ایندکس باشه که در حقیقت مرتب شده محسوب میشه
conquer: این مرحله همونجایی که الگوریتم خودش رو صدا میزنه تا زمانی که به حالت پایه یا همون بیسکیس برسه که لیستی فقط با یک ایندکس هستش
combine: این قسمت مهم در این الگوریتم هستش. در این مرحله الگوریتم لیستها کوچیک شده رو باهم مقایسه میکنه و اونا ترکیب میکنه تا به یک لیست بزرگتر ولی مرتب شده برسه و اینکار رو انقدر ادامه میده تا درنهایت فقط یک لیست مرتب شده باقی مونده باشه که خروجی الگوریتم محصوب میشه
الگوریتم merge sort بیشتر روی مرحله Combine تمرکز داره که نوشن میده الگوریتمها در این پرادایم میتونن به یکی از این ۳ حالت تمرکز بیشتری نشون بدن. برای مثال الگوریتم Quick sort بیشتر به مرحله Divide تمرکز میکنه و دنبال pivot میگرده و مکان pivot خودش رو مرتب میکنه.
امیدوارم درباره پارادایم D&C چیزی یادگرفته باشید D:
میتونید این پرادایم داخل مسائل دیگه هم استفاده کنید و مشکلاتتون حل کنید. در نهایت توانایی حل مسئله ما مهمه :)
@TorhamDevCH
الگوریتم تقسیم و حل و یا همون Divide and Conquer که به مخفف D&C هم شناخته میشن یک پرادایم الگوریتمی هستند که داخل این پرادایم ما با کوچک کردن مشکل ( problem ) به مشکلات کوچیکتر ( sub-problem ) اونها رو حل میکنیم. از معروفترین الگوریتمهای این پرادایم الگوریتمهای Merge sort و Quick sort هستند. الگوریتمهای D&C معمولا به سورت recursive نوشته میشن.
هر الگوریتم D&C قالبا از ۳ بخش اصلی تشکیل شده:
Divide: در این مرحله الگوریتم مشکل رو به مشکلات ساده تر و کوچیک تر تقسیم میکنه. که مشکلات کوچکتر باید بتونن خودشون به شکل مجزا حل بشند
Conquer: مشکلات کوچیک شده رو به صورت تکرارشوند یا ریکرسیو حل میکنه تا زمانی که مشکل انقدر ساده شده باشه که خودش حل شده محصوب بشه که به این حالت، حالت پایه یا بیسکیس گفته میشه
Combine: در این مرحله ما راه حل تمام مشکلات کوچیک شده ای که حل کردیم رو باهم ادغام میکنیم تا به یک جواب کامل برسیم.
برای مثال الگوریتم Merge sort :
divide: در این مرحله الگوریتم به شکل تکرارشونده لیست ورودی رو به دو تیکه تقسیم میکنه تا زمانی که این لیست حاوی یک ایندکس باشه که در حقیقت مرتب شده محسوب میشه
conquer: این مرحله همونجایی که الگوریتم خودش رو صدا میزنه تا زمانی که به حالت پایه یا همون بیسکیس برسه که لیستی فقط با یک ایندکس هستش
combine: این قسمت مهم در این الگوریتم هستش. در این مرحله الگوریتم لیستها کوچیک شده رو باهم مقایسه میکنه و اونا ترکیب میکنه تا به یک لیست بزرگتر ولی مرتب شده برسه و اینکار رو انقدر ادامه میده تا درنهایت فقط یک لیست مرتب شده باقی مونده باشه که خروجی الگوریتم محصوب میشه
الگوریتم merge sort بیشتر روی مرحله Combine تمرکز داره که نوشن میده الگوریتمها در این پرادایم میتونن به یکی از این ۳ حالت تمرکز بیشتری نشون بدن. برای مثال الگوریتم Quick sort بیشتر به مرحله Divide تمرکز میکنه و دنبال pivot میگرده و مکان pivot خودش رو مرتب میکنه.
امیدوارم درباره پارادایم D&C چیزی یادگرفته باشید D:
میتونید این پرادایم داخل مسائل دیگه هم استفاده کنید و مشکلاتتون حل کنید. در نهایت توانایی حل مسئله ما مهمه :)
@TorhamDevCH
❤6👍6
TorhamDev | تورهام 😳
الگوریتمهای Divide and Conquer چی هستند؟ الگوریتم تقسیم و حل و یا همون Divide and Conquer که به مخفف D&C هم شناخته میشن یک پرادایم الگوریتمی هستند که داخل این پرادایم ما با کوچک کردن مشکل ( problem ) به مشکلات کوچیکتر ( sub-problem ) اونها رو حل میکنیم.…
مثال الگوریتم Merge Sort که گفتم.
❤8
https://github.com/bregman-arie/devops-exercises
یک ریپوزیتوری خوب اگه دواپس کار هستید و حتی اگه نیستید!
تمرینها خوبی داخلش داره پایه ان بیشترشون و کمک میکنن داوپس بهتر بشید. من خودم بخش پایتونش دارم حل میکنم البته خیلی دواپسی نیست به نظرم بیشتر پایههای پایتونی.
@TorhamDevCH
یک ریپوزیتوری خوب اگه دواپس کار هستید و حتی اگه نیستید!
تمرینها خوبی داخلش داره پایه ان بیشترشون و کمک میکنن داوپس بهتر بشید. من خودم بخش پایتونش دارم حل میکنم البته خیلی دواپسی نیست به نظرم بیشتر پایههای پایتونی.
@TorhamDevCH
GitHub
GitHub - bregman-arie/devops-exercises: Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform…
Linux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions - bre...
❤4👍2
دوستان امروز داشتم رو یکی از چالشهای سایت codecrafters کار میکردم که الان تموم شد :)
چالشش ساخت یک وب سرور از پایه بود فقط با استفاده از کتابخونه socket. چالشش چندین مرحله داشت که هر مرحله کدوتون پابلیش میکردید رو گیت خودشون و اونجا یکسری تست ران میشد روش. تجربه خوبی بود. منتها codecrafters پولی هستش و همین چالش برای این ماه رایگان بود :))
اگه دوست داشتید شما هم امتحانش کنید.
https://app.codecrafters.io/catalog
@TorhamDevCH
چالشش ساخت یک وب سرور از پایه بود فقط با استفاده از کتابخونه socket. چالشش چندین مرحله داشت که هر مرحله کدوتون پابلیش میکردید رو گیت خودشون و اونجا یکسری تست ران میشد روش. تجربه خوبی بود. منتها codecrafters پولی هستش و همین چالش برای این ماه رایگان بود :))
اگه دوست داشتید شما هم امتحانش کنید.
https://app.codecrafters.io/catalog
@TorhamDevCH
😘13👍3❤2🔥2
مثل اینکه تحقیقات جدید نشون داده بلد بودن ریاضی اونقدری هم به یاد گرفتن برنامهنویسی کمک نمیکنه :)
طبق این تحقیقات توانایی افراد برای یاد گرفتن یک زبان جدید بیشتر تاثییر در یادگیری یک زبان برنامهنویسی داره تا ریاضیات یا حداقل در پایتون که داخل این تحقیقات ازش استفاده شده.
Taken together, these result make the case for language skills being an integral aspect of learning programming (or at least of learning Python), while math skills weren’t very predictive of how well or quickly participants learned. This idea has important implications for the perceptions surrounding programming, which is often viewed as a “math intensive” field.
درسته بعضی از شاخههای برنامهنویسی نیاز به ریاضیات بیشتری نسبت به بقیه شاخهها داره اما اینکه برنامهنویس و برنامهنویس خوب بودن رو در ریاضیات ببینیم به نظر خیلی منطقی نمیاد :).
مقاله جالبیه اگه دوست داشتید مطالعه کنید.
https://massivesci.com/articles/programming-math-language-python-women-in-science/
@TorhamDevCH
طبق این تحقیقات توانایی افراد برای یاد گرفتن یک زبان جدید بیشتر تاثییر در یادگیری یک زبان برنامهنویسی داره تا ریاضیات یا حداقل در پایتون که داخل این تحقیقات ازش استفاده شده.
Taken together, these result make the case for language skills being an integral aspect of learning programming (or at least of learning Python), while math skills weren’t very predictive of how well or quickly participants learned. This idea has important implications for the perceptions surrounding programming, which is often viewed as a “math intensive” field.
درسته بعضی از شاخههای برنامهنویسی نیاز به ریاضیات بیشتری نسبت به بقیه شاخهها داره اما اینکه برنامهنویس و برنامهنویس خوب بودن رو در ریاضیات ببینیم به نظر خیلی منطقی نمیاد :).
مقاله جالبیه اگه دوست داشتید مطالعه کنید.
https://massivesci.com/articles/programming-math-language-python-women-in-science/
@TorhamDevCH
👍21👎3❤1
https://www.linkedin.com/posts/torham-mohammadian_afyaepahyaesaewaeu-aeqagpabraepaeuaex-aeuaeuagvaew-activity-7324336671892631553-FGOG
بچهها خوشحال میشم این پست لینکدینام رو repost کنید ❤️
بچهها خوشحال میشم این پست لینکدینام رو repost کنید ❤️
Linkedin
#پایتون #بک_اند #جنگو #backend #django #fastapi #flask #پایتون #کارجو | Torham Mohammadian | 22 comments
سلام دوستان، تورهام هستم برنامهنویس #پایتون #بک_اند این روزها دنبال یک موقعیت شغلی جدید میگردم به عنوان برنامهنویس پایتون بکاند. من نزدیک به ۴ سال سابقه کاری در این حوزه دارم و تقریبا به تمام فریمورکهای وب معروف پایتون تسلط دارم با کمی تسلط بیشتر به #جنگو…
👍6👎3
اگر بخوام به یادگیریم قبل از استفاده از AI نمره بدم ۶ میدم و بعد از استفاده از AI باید ۹.۲۵ بدم. تاثیر بینظیری داشته. شکل معمول باید ویدیو میدید یا داکیومنت رو میخوندید که در نهایت تنها به درک شما از اون مطلب بر میگشت و چقدر اون داکیومنت یا دوره روونه. دیگه نمیشد سوالی پرسید اگه فلان جا رو نمیفهمیدید باید سرچ میکردید و دوباره همون حلقه رو تکرار میکردید ولی با LLM ها میشه دیتا رو خلاصه سازی کرد و نسبت به شیوه یادگیری خودتون تغییرش داد. مثلا داخل پرامت من برای چتی که برای یادگیری استفاده کردم بهش گفتم که همیشه سعی کنه یک Analogy از دنیا واقعیت بگه که خیلی تاثییر داره. و اینکه خیلی چیزا رو میشه کنار هم داشت. برای مثال من یک چت برای سوالات برنامه نویسی دارم و یک چت برای سوالات مرتبط با زبان انگلیسی. اگر کلمه ای رو نفهمم میرم تب بعدی میپرسم و توضیح کامل و خوبی میگیرم :)
البته من هنوز برای دیباگ و برنامه نوشتن از ai استفاده نمیکنم و قالب تهش یک تیکه کد کوچیک ازش بخوام یا اروری که داخل نت پیدا نکردم بدم برام سرچ کنه یا دلیلش توضیح بده. در کل اینکه لقمه رو ازش نمیگیرم درجا :D
خلاصه اگه تا حالا شروع به یادگیری با llm ها نکردید به نظرم یه شانس بهشون بدید و سعی کنید با شیوه یادگیری خودتون تنظیمش کنید.
البته من کلا از Gemini استفاده میکنم همون اول رفتم سراغش همینجا موندم :)
@TorhamDevCH
البته من هنوز برای دیباگ و برنامه نوشتن از ai استفاده نمیکنم و قالب تهش یک تیکه کد کوچیک ازش بخوام یا اروری که داخل نت پیدا نکردم بدم برام سرچ کنه یا دلیلش توضیح بده. در کل اینکه لقمه رو ازش نمیگیرم درجا :D
خلاصه اگه تا حالا شروع به یادگیری با llm ها نکردید به نظرم یه شانس بهشون بدید و سعی کنید با شیوه یادگیری خودتون تنظیمش کنید.
البته من کلا از Gemini استفاده میکنم همون اول رفتم سراغش همینجا موندم :)
@TorhamDevCH
👍31👎2💯2❤1
سلام دوستان
امیدوارم حالتون خوب باشه، پرسشنامه زیر مربوط به حوزه پیامک هستش و من دارم تحقیقات و پایاننامم رو در رشته بازاریابی تکمیل میکنم. ممنون میشم حدود 3 دقیقه وقت بذارید و مشارکت کنید. جوابهای شما در این مسیر برای من خیلی کمککننده است. ممنون🍀
https://app.epoll.pro/e/o/MTMyNTIz
امیدوارم حالتون خوب باشه، پرسشنامه زیر مربوط به حوزه پیامک هستش و من دارم تحقیقات و پایاننامم رو در رشته بازاریابی تکمیل میکنم. ممنون میشم حدود 3 دقیقه وقت بذارید و مشارکت کنید. جوابهای شما در این مسیر برای من خیلی کمککننده است. ممنون🍀
https://app.epoll.pro/e/o/MTMyNTIz
ePoll
میزان آشنایی با پنلهای پیامکی
ePoll سامانه تحت وب جهت طراحی، جمعآوری و تحلیل پرسشنامهها و فرم ها به صورت آنلاین و آفلاین برای کاربردهای بازاریابی، تحقیقات بازار، نظرسنجی و ارزیابی است
❤1
TorhamDev | تورهام 😳
سلام دوستان امیدوارم حالتون خوب باشه، پرسشنامه زیر مربوط به حوزه پیامک هستش و من دارم تحقیقات و پایاننامم رو در رشته بازاریابی تکمیل میکنم. ممنون میشم حدود 3 دقیقه وقت بذارید و مشارکت کنید. جوابهای شما در این مسیر برای من خیلی کمککننده است. ممنون🍀 htt…
بچهها یکی از ممبرها برای پایاننامهاش لازم داره اگه وقت کردید این نظرسنجی رو پر کنید
👌1
جیغکد چیست؟
به مرحله از دیباگ و توسعه میگوییند که 10 ساعت وقت خود را گذاشته و حل کردید، حال اگر کد ببینید جیغ میکشید.
@TorhamDevCH
به مرحله از دیباگ و توسعه میگوییند که 10 ساعت وقت خود را گذاشته و حل کردید، حال اگر کد ببینید جیغ میکشید.
@TorhamDevCH
😭35🤣5👍3🕊1
TorhamDev | تورهام 😳
جیغکد چیست؟ به مرحله از دیباگ و توسعه میگوییند که 10 ساعت وقت خود را گذاشته و حل کردید، حال اگر کد ببینید جیغ میکشید. @TorhamDevCH
https://github.com/TorhamDev/command-over-zmq
تمام شد. خیلی دلم میخواد داکرایزش کنم ولی حال ندارم دیگه، بخونید باگ چیزی دیدی بگید بهم.
@TorhamDevCH
تمام شد. خیلی دلم میخواد داکرایزش کنم ولی حال ندارم دیگه، بخونید باگ چیزی دیدی بگید بهم.
@TorhamDevCH
GitHub
GitHub - TorhamDev/command-over-zmq: Asynchronous ZeroMQ-based command runner with brokered architecture, built for a technical…
Asynchronous ZeroMQ-based command runner with brokered architecture, built for a technical interview challenge. - TorhamDev/command-over-zmq
👍5❤1
MIT CS
1. Introduction to Computer Science and Programming in python
2. Fundamentals of Programming (NOT MIT)
3. Software Construction
4. Mathematics for Computer Science
5. Introduction to Algorithms
6. Computability and Complexity Theory
7. Computer Systems Engineering
8. Introduction to Low-level Programming in C and Assembly
9. Computation Structures
Select one of the following:
Introduction to Probability
Introduction to Inference
Introduction to Probability and Statistics
Linear Algebra
Linear Algebra and Optimization
1. Introduction to Computer Science and Programming in python
2. Fundamentals of Programming (NOT MIT)
3. Software Construction
4. Mathematics for Computer Science
5. Introduction to Algorithms
6. Computability and Complexity Theory
7. Computer Systems Engineering
8. Introduction to Low-level Programming in C and Assembly
9. Computation Structures
Select one of the following:
Introduction to Probability
Introduction to Inference
Introduction to Probability and Statistics
Linear Algebra
Linear Algebra and Optimization
👌4