سلام دوستان میخواستم دوتا مقدار رو توی یه حلقه بگیرم
اما نمیدونم کجای کارم اشتباهه که همیشه خروجیم 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 نمیرسه
وقتی که با 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 داره روش حرکت میکنه کوچک تره و اونه که تعیین کننده زمان تمام شدن حلقست.
لیست دو بعدی چیه؟ یه لیست که هر عنصرش یه لیست دیگه هست
برای این که بهتر متوجه بشین خودتون روی کاغذ کد رو خط به خط اجرا کنید و مقادیر x و i رو یادداشت کنید.
من کاملا متوجه منظور شما میشم
اما سوال من اینه بیاین کامل کد من رو بزاریم کنار
من میخوام توی یک حلقه دو مقدار رو حساب کنم
۱ . طول ارایه مادر
۲ . طول ارایه های فرزند(که همه با هم برابرند)
از اونجایی که ارایه ها متغیر هستند یعنی توسط کاربر داده میشن
امکان داره ی موقع ای طول ارایه مادر بیشتر باشه یه موقع هاییم لیست های زیر گروهش
در کل مث جدول
امکان داره ی موقع ای طول ارایه مادر بیشتر باشه یه موقع هاییم لیست های زیر گروهش
در کل مث جدول
وقتی اینجوری با zip دارین روی لیست ها حرکت میکنید کوچک ترین لیست هست که تعیین میکنه کی حلقه شما تموم میشه برای همین تعداد دفعات تکرار حلقه for شما میشه معادل کوچک ترین لیست (که در اینجا یا لیست مادر کوچک تره یا لیست فرزند)
در ضمن حواستون باشه که توی پایتون ما آرایه با اون مفهوم خاص که دسترسی به هر عنصرش تضمینی O(1) هست نداریم و فقط لیست داریم. البته بهینه هست و توی استفاده های عادی جای نگرانی نیست.
دلیل خاصی دارین برای این که توی حلقه اندازه لیست ها رو حساب کنید؟
لیست اصلی اندازش برابر با len(matrix) هست و لیست های زیرمجموعه اندازشون len(matrix[0]) دقیقا همون طور که خودتون هم نوشتین. ضمنا لیست های زیر مجموعه matrix هرکدوم میتونن سایز متفاوتی داشته باشن و لزوما سایزشون برابر نیست.