حلقه ها در Pyhton

سلام دوستان میخواستم دوتا مقدار رو توی یه حلقه بگیرم
اما نمیدونم کجای کارم اشتباهه که همیشه خروجیم 0,1,2 میشه
این هم کد

matrix = [[0,1,1,2],
          [0,5,0,0],
          [2,0,3,3]]
print(len(matrix[0]))
print(range(len(matrix[0])))
for i , x in zip( range(len(matrix)) , range(len(matrix[0])) ):
  print(x)      

لطفا کد رو درست قرار بدین
میتونید یه خط با متنون فاصله بدین و به اول هر خط چهار تا فاصله اضافه کنید یا هم این که با سه تا از اینا شروع و تمومش کنید
```
code here
```

مشکل دقیقا کجاست؟
مقادیر i باید باشه 0, 1, 2
و x هم باید باشه 0, 1, 2, 3
که چون i کوچک تره x هیج وقت به 3 نمیرسه

ممنون از راهنمایی
بحث من اینه چرا خروجی نباید بشه
0,1,2,3

وقتی که با zip روی دوتا لیست حرکت میکنید، کوچک ترین لیست تعیین میکنه کی for تموم بشه
اینجا range(len(matrix)) طولش کوجک تره و به محض این که به انتها برسه حلقه تموم میشه
برای مثال اگه برنامه رو به شکل زیر تغییر بدین:

matrix = [[0, 1, 1, 2],                                                          
          [0, 5, 0, 0],                                                          
          [2, 0, 3, 3],                                                          
          [1, 2, 3, 4],                                                          
          [1, 2, 3, 4]]                                                          
                                                                                  
 for i, x in zip(range(len(matrix)), range(len(matrix[0]))):                      
     print(f"{i}, {x}")

اینبار x مقادیر 0, 1, 2, 3 رو داره اما i که باید مقادیر 0, 1, 2, 3, 4 رو داشته باشه روی 3 متوقف میشه و هیچ وقت به 4 نمیرسه چون لیستی که x داره روش حرکت میکنه کوچک تره و اونه که تعیین کننده زمان تمام شدن حلقست.

خروجی i اوکی هست اما خروجی x رو من مشکل دارم و میخوام بدون تغییر لیست به این مقادیر برسم حالا فرقیم نداره zip چطور تغییر کنه

و در ضمن زمانی که ما از range استفاده میکنیم معموله که تا ۴ نمیره

ولی این فقط یک لیسته ۲ بعدیه اگه اشتباه نکنم

لیست دو بعدی چیه؟ یه لیست که هر عنصرش یه لیست دیگه هست
برای این که بهتر متوجه بشین خودتون روی کاغذ کد رو خط به خط اجرا کنید و مقادیر x و i رو یادداشت کنید.

من کاملا متوجه منظور شما میشم :sweat_smile:
اما سوال من اینه بیاین کامل کد من رو بزاریم کنار
من میخوام توی یک حلقه دو مقدار رو حساب کنم
۱ . طول ارایه مادر
۲ . طول ارایه های فرزند(که همه با هم برابرند)
از اونجایی که ارایه ها متغیر هستند یعنی توسط کاربر داده میشن
امکان داره ی موقع ای طول ارایه مادر بیشتر باشه یه موقع هاییم لیست های زیر گروهش
در کل مث جدول

1 پسندیده

خوب دقیقا همینه که میگین.

امکان داره ی موقع ای طول ارایه مادر بیشتر باشه یه موقع هاییم لیست های زیر گروهش
در کل مث جدول

وقتی اینجوری با zip دارین روی لیست ها حرکت میکنید کوچک ترین لیست هست که تعیین میکنه کی حلقه شما تموم میشه برای همین تعداد دفعات تکرار حلقه for شما میشه معادل کوچک ترین لیست (که در اینجا یا لیست مادر کوچک تره یا لیست فرزند)

در ضمن حواستون باشه که توی پایتون ما آرایه با اون مفهوم خاص که دسترسی به هر عنصرش تضمینی O(1) هست نداریم و فقط لیست داریم. البته بهینه هست و توی استفاده های عادی جای نگرانی نیست.

دلیل خاصی دارین برای این که توی حلقه اندازه لیست ها رو حساب کنید؟
لیست اصلی اندازش برابر با len(matrix) هست و لیست های زیرمجموعه اندازشون len(matrix[0]) دقیقا همون طور که خودتون هم نوشتین. ضمنا لیست های زیر مجموعه matrix هرکدوم میتونن سایز متفاوتی داشته باشن و لزوما سایزشون برابر نیست.

1 پسندیده

خوب خارج از zip چطور این مقادیر رو بگیرم؟

اره میخوام بعضی هاشون رو پاک کنم و در کل برای تمرین خودمه

نه همگی سایزشون برابر هست

دو تا حلقه جدا بنویسید

1 پسندیده

ممنون بابت راهنماییت