วิธีการเริ่มต้นอาร์เรย์สองมิติใน Python ได้อย่างไร


262

ฉันเริ่มต้นไพ ธ อนและฉันพยายามใช้รายการสองมิติซึ่งตอนแรกฉันเติมตัวแปรตัวเดียวกันในทุกที่ ฉันมากับสิ่งนี้:

def initialize_twodlist(foo):
    twod_list = []
    new = []
    for i in range (0, 10):
        for j in range (0, 10):
            new.append(foo)
        twod_list.append(new)
        new = []

มันให้ผลลัพธ์ที่ต้องการ แต่ให้ความรู้สึกเหมือนเป็นวิธีแก้ปัญหา มีวิธีที่ง่ายกว่า / สั้นกว่า / สวยงามกว่านี้หรือไม่?


7
เพียงนิดเดียว (หรือสำคัญขึ้นอยู่กับว่าใครกำลังดู) nitpick: รายการไม่ใช่อาร์เรย์ ถ้าคุณต้องการอาร์เรย์ให้ใช้ numpy
Arnab Datta

คำถามนี้คล้ายกัน : อธิบายการเริ่มต้นของอาร์เรย์หลายมิติใน Python
Anderson Green

@ArnabDatta คุณจะเริ่มต้นอาร์เรย์หลายมิติได้อย่างไร?
Anderson Green


คุณสามารถจัดเรียงข้อมูลในอาเรย์เช่นโครงสร้างใน Python เริ่มต้นได้ แต่มันก็ไม่ได้มีประสิทธิภาพหรือมีประโยชน์เหมือนกับอาเรย์ NumPy โดยเฉพาะถ้าคุณต้องการจัดการกับชุดข้อมูลขนาดใหญ่ นี่คือเอกสารdocs.scipy.org/doc/numpy-1.10.1/user/basics.creation.html
jmdeamer

คำตอบ:


376

รูปแบบที่พบบ่อยใน Python คือ

bar = []
for item in some_iterable:
    bar.append(SOME EXPRESSION)

ซึ่งช่วยกระตุ้นการเปิดตัวรายการความเข้าใจซึ่งแปลงส่วนย่อยนั้นเป็น

bar = [SOME EXPRESSION for item in some_iterable]

ซึ่งสั้นกว่าและบางครั้งก็ชัดเจนขึ้น โดยปกติคุณจะติดนิสัยในการจดจำสิ่งเหล่านี้และมักจะแทนที่การวนซ้ำด้วยความเข้าใจ

รหัสของคุณเป็นไปตามรูปแบบนี้สองครั้ง

twod_list = []                                       \                      
for i in range (0, 10):                               \
    new = []                  \ can be replaced        } this too
    for j in range (0, 10):    } with a list          /
        new.append(foo)       / comprehension        /
    twod_list.append(new)                           /

35
อย่างไรก็ตาม [[foo] * 10 สำหรับ x ใน xrange (10)] สามารถใช้เพื่อกำจัดความเข้าใจหนึ่งข้อ ปัญหาคือการคูณทำสำเนาแบบตื้นดังนั้นใหม่ = [foo] * 10 ใหม่ = [ใหม่] * 10 คุณจะได้รับรายการที่มีรายการเดียวกันสิบครั้ง
Scott Wolchok

8
ในทำนองเดียวกัน[foo] * 10รายการที่มีค่าเท่ากันfoo10 ครั้งซึ่งอาจมีหรือไม่มีความสำคัญก็ได้
Mike Graham

2
เราสามารถใช้สิ่งที่ง่ายที่สุด: wtod_list = [[0 สำหรับ x ใน xrange (10))] สำหรับ x ใน xrange (10)]
indi60

2
ไม่เคยเจ็บปวดที่จะแสดงให้คนเห็นว่าปลามีลักษณะเป็นอย่างไร
Csteele5

2
สำหรับความคิดเห็นของไมค์เกรแฮมเกี่ยวกับ[foo] * 10: วิธีการนี้ว่าเรื่องนี้จะไม่ทำงานถ้าคุณกรอกอาร์เรย์กับตัวเลขแบบสุ่ม (ประเมิน[random.randint(1,2)] * 10ไป[1] * 10หรือ[2] * 10ซึ่งหมายความว่าคุณจะได้รับอาร์เรย์ของ 1s 2s ทั้งหมดหรือแทนการอาร์เรย์แบบสุ่ม.
สุหลี่

224

คุณสามารถใช้list comprehension :

x = [[foo for i in range(10)] for j in range(10)]
# x is now a 10x10 array of 'foo' (which can depend on i and j if you want)

1
เนื่องจากขนาด (10) เหมือนกันมันก็ดีถ้าไม่ใช่ลูปซ้อนจะต้องมาก่อน [foo สำหรับ j อยู่ในช่วง (range_of_j)] สำหรับ i ในช่วง (range_of_i)]
Dineshkumar

2
คำตอบนี้ใช้ได้ดี แต่เนื่องจากเราทำซ้ำiสำหรับแถวและjสำหรับคอลัมน์ฉันคิดว่าควรสลับที่ดีกว่าiและjในไวยากรณ์ของคุณเพื่อความเข้าใจที่ดีขึ้นและเปลี่ยนช่วงเป็น 2 ตัวเลขที่แตกต่างกัน
DragonKnight

138

วิธีนี้เร็วกว่าความเข้าใจในรายการซ้อน

[x[:] for x in [[foo] * 10] * 10]    # for immutable foo!

นี่คือการกำหนดเวลา python3 บางรายการสำหรับรายการขนาดเล็กและขนาดใหญ่

$python3 -m timeit '[x[:] for x in [[1] * 10] * 10]'
1000000 loops, best of 3: 1.55 usec per loop

$ python3 -m timeit '[[1 for i in range(10)] for j in range(10)]'
100000 loops, best of 3: 6.44 usec per loop

$ python3 -m timeit '[x[:] for x in [[1] * 1000] * 1000]'
100 loops, best of 3: 5.5 msec per loop

$ python3 -m timeit '[[1 for i in range(1000)] for j in range(1000)]'
10 loops, best of 3: 27 msec per loop

คำอธิบาย:

[[foo]*10]*10สร้างรายการของวัตถุเดียวกันซ้ำแล้วซ้ำอีก 10 ครั้ง คุณไม่สามารถใช้สิ่งนี้เพราะการแก้ไของค์ประกอบหนึ่งจะแก้ไของค์ประกอบเดียวกันในแต่ละแถว!

x[:]เทียบเท่ากับlist(X)แต่มีประสิทธิภาพมากกว่านี้เล็กน้อยเนื่องจากไม่ต้องค้นหาชื่อ ไม่ว่าจะด้วยวิธีใดก็สร้างสำเนาตื้นของแต่ละแถวดังนั้นตอนนี้องค์ประกอบทั้งหมดจึงเป็นอิสระ

องค์ประกอบทั้งหมดเป็นfooวัตถุเดียวกันแม้ว่าดังนั้นหากfooไม่แน่นอนคุณไม่สามารถใช้รูปแบบนี้ได้คุณต้องใช้

import copy
[[copy.deepcopy(foo) for x in range(10)] for y in range(10)]

หรือสมมติคลาส (หรือฟังก์ชัน) Fooที่ส่งคืนfoos

[[Foo() for x in range(10)] for y in range(10)]

4
@ ไมค์คุณคิดถึงส่วนที่เป็นตัวหนาหรือไม่? ถ้า foo ไม่สามารถเปลี่ยนแปลงได้ไม่มีคำตอบอื่นใดที่นี่ทำงาน (เว้นแต่ว่าคุณไม่ได้กลายพันธุ์ foo เลย)
John La Rooy

1
คุณไม่สามารถคัดลอกวัตถุโดยใช้อย่างถูกต้องcopy.deepcopyได้ คุณต้องการแผนเฉพาะสำหรับข้อมูลของคุณหากคุณมีวัตถุที่ไม่แน่นอนที่เปลี่ยนแปลงได้
Mike Graham

1
หากคุณต้องการความเร็วที่ไม่ดีในวงอาจถึงเวลาที่คุณต้องใช้ Cython สานหรือคล้ายกัน ...
james.haggerty

1
@JohnLaRooy ฉันคิดว่าคุณสบตาและx yไม่ควรจะเป็น[[copy.deepcopy(foo) for y in range(10)] for x in range(10)]
user3085931

1
@Nils [foo]*10ไม่สร้าง 10 วัตถุที่แตกต่าง - แต่มันเป็นเรื่องง่ายที่จะมองข้ามความแตกต่างในกรณีที่ foo จะไม่เปลี่ยนรูปเหมือนหรือint str
John La Rooy

137

อย่าใช้[[v]*n]*nมันเป็นกับดัก!

>>> a = [[0]*3]*3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[0][0]=1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]

แต่

    t = [ [0]*3 for i in range(3)]

ใช้งานได้ดี


26
ใช่ฉันตกหลุมพรางนี้เช่นกัน เป็นเพราะ*การคัดลอกaddressวัตถุ (รายการ)
chinuy

1
โหวตเพิ่มขึ้นเนื่องจากสิ่งนี้ทำให้ฉัน เพื่อความชัดเจน[[0] * col for _ in range(row)].
Abhijit Sarkar

62

ในการเริ่มต้นอาร์เรย์สองมิติใน Python:

a = [[0 for x in range(columns)] for y in range(rows)]

4
ในการเริ่มต้นค่าทั้งหมด 0, a = [[0 for x in range(columns)] for y in range(rows)]ใช้เพียง
ZX9

28
[[foo for x in xrange(10)] for y in xrange(10)]

1
xrange () ถูกลบใน
python3.5

เหตุใดจึงไม่ทำงาน: [0 * col] * แถว เมื่อฉันแก้ไของค์ประกอบบางอย่างมันจะทำซ้ำที่อื่น แต่ฉันไม่เข้าใจว่าทำไม
โค้ด

เพราะนั่นทำในสิ่งเดียวกันกับรหัสในคำถาม
Ignacio Vazquez-Abrams

2
@codemuncher เหตุผลที่[[0] * col] * rowไม่ได้ทำสิ่งที่คุณต้องการเพราะเมื่อคุณเริ่มต้นรายการ 2d ด้วยวิธีนั้น Python จะไม่สร้างสำเนาที่แตกต่างกันของแต่ละแถว แต่มันจะ init [0]*colรายการนอกกับตัวชี้ไปยังสำเนาเดียวกันของ การแก้ไขใด ๆ ที่คุณทำกับหนึ่งในแถวนั้นจะปรากฏในแถวที่เหลือเนื่องจากทั้งหมดนั้นจะชี้ไปที่ข้อมูลเดียวกันในหน่วยความจำ
Addie

แค่คิด แต่ก็ไม่ใช่รายการทั้งหมดนี้ไม่ดีสำหรับการต่อท้าย? กล่าวคือ ถ้าฉันต้องการรายการมิติ 2 มิติที่ว่างเปล่า 3 * 6 และต้องการผนวกเข้ากับดัชนี [0] [0], [1] [0], [2] [0] และอื่น ๆ เพื่อเติมองค์ประกอบทั้งหมด 18 รายการโดยไม่มี คำตอบเหล่านี้จะทำงานใช่ไหม
mLstudent33

22

โดยปกติเมื่อคุณต้องการอาร์เรย์หลายมิติคุณไม่ต้องการรายการของรายการ แต่เป็นอาร์เรย์ numpy หรือ dict

ตัวอย่างเช่นด้วย numpy คุณจะทำอะไรเช่น

import numpy
a = numpy.empty((10, 10))
a.fill(foo)

2
แม้ว่าnumpyจะยอดเยี่ยม แต่ฉันคิดว่ามันอาจเกินความเป็นมือใหม่สำหรับผู้เริ่มต้น
Esteban Küber

3
numpy จัดเตรียมประเภทอาร์เรย์หลายมิติ การสร้างอาเรย์หลายมิติที่ดีออกจากรายการเป็นไปได้ แต่มีประโยชน์น้อยกว่าและยากกว่าสำหรับผู้เริ่มต้นกว่าการใช้ numpy รายการที่ซ้อนกันนั้นยอดเยี่ยมสำหรับบางแอปพลิเคชั่น แต่โดยปกติแล้วไม่ใช่สิ่งที่ใครบางคนที่ต้องการอาร์เรย์ 2d จะดีที่สุด
Mike Graham

1
numpyหลังจากนั้นไม่กี่ปีที่ผ่านมาบางครั้งทำหลามร้ายแรงปพลิเคชันนิสัยใจคอของอาร์เรย์หลามมาตรฐานดูเหมือนจะใบสำคัญแสดงสิทธิแค่ไปข้างหน้าด้วย +1
javadba

12

คุณสามารถทำสิ่งนี้:

[[element] * numcols] * numrows

ตัวอย่างเช่น:

>>> [['a'] *3] * 2
[['a', 'a', 'a'], ['a', 'a', 'a']]

แต่สิ่งนี้มีผลข้างเคียงที่ไม่พึงประสงค์:

>>> b = [['a']*3]*3
>>> b
[['a', 'a', 'a'], ['a', 'a', 'a'], ['a', 'a', 'a']]
>>> b[1][1]
'a'
>>> b[1][1] = 'b'
>>> b
[['a', 'b', 'a'], ['a', 'b', 'a'], ['a', 'b', 'a']]

11
จากประสบการณ์ของฉันเอฟเฟกต์ "ไม่พึงปรารถนา" นี้มักเป็นสาเหตุของข้อผิดพลาดเชิงตรรกะบางอย่างที่เลวร้ายมาก ในความคิดของฉันควรหลีกเลี่ยงวิธีการนี้แทนคำตอบของ @ Vipul นั้นดีกว่ามาก
อลันทัวริง

วิธีการนี้ใช้งานได้ดีทำไมในความคิดเห็นบางคนอ้างว่าไม่ดี
Bravo

1
เนื่องจากผลข้างเคียงที่ไม่ถูกต้องคุณไม่สามารถถือว่าเป็นเมทริกซ์ได้ หากคุณไม่จำเป็นต้องแก้ไขเนื้อหามันก็จะไม่เป็นไร
hithwen

9
twod_list = [[foo for _ in range(m)] for _ in range(n)]

สำหรับ n คือจำนวนแถวและ m คือจำนวนคอลัมน์และ foo คือค่า


8

หากเป็นอาเรย์ที่มีประชากรเบาบางคุณอาจจะดีกว่าถ้าใช้พจนานุกรมที่มี tuple

dict = {}
key = (a,b)
dict[key] = value
...


4

วิธีการที่ไม่ถูกต้อง: [[ไม่มี * m] * n]

>>> m, n = map(int, raw_input().split())
5 5
>>> x[0][0] = 34
>>> x
[[34, None, None, None, None], [34, None, None, None, None], [34, None, None, None, None], [34, None, None, None, None], [34, None, None, None, None]]
>>> id(x[0][0])
140416461589776
>>> id(x[3][0])
140416461589776

ด้วยวิธีการนี้ python ไม่อนุญาตให้สร้างพื้นที่ที่อยู่ที่แตกต่างกันสำหรับคอลัมน์ด้านนอกและจะนำไปสู่พฤติกรรมที่ไม่เหมาะสมมากกว่าที่คุณคาดหวัง

วิธีการที่ถูกต้อง แต่มีข้อยกเว้น:

y = [[0 for i in range(m)] for j in range(n)]
>>> id(y[0][0]) == id(y[1][0])
False

มันเป็นวิธีการที่ดี แต่มีข้อยกเว้นหากคุณตั้งค่าเริ่มต้นเป็น None

>>> r = [[None for i in range(5)] for j in range(5)]
>>> r
[[None, None, None, None, None], [None, None, None, None, None], [None, None, None, None, None], [None, None, None, None, None], [None, None, None, None, None]]
>>> id(r[0][0]) == id(r[2][0])
True

ดังนั้นตั้งค่าเริ่มต้นของคุณอย่างถูกต้องโดยใช้วิธีนี้

ถูกต้องทั้งหมด:

ติดตามการตอบกลับไมค์ของสองวง


3
Matrix={}
for i in range(0,3):
  for j in range(0,3):
    Matrix[i,j] = raw_input("Enter the matrix:")

1
ในขณะที่รหัสนี้อาจตอบคำถาม แต่มีบริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการที่รหัสนี้ตอบคำถามช่วยปรับปรุงมูลค่าระยะยาว
Ajean

3

ในการเริ่มต้นใช้อาร์เรย์แบบสองมิติ: arr = [[]*m for i in range(n)]

จริง ๆ แล้ว arr = [[]*m]*nจะสร้างอาร์เรย์ 2 มิติซึ่ง n อาร์เรย์ทั้งหมดจะชี้ไปยังอาร์เรย์เดียวกันดังนั้นการเปลี่ยนแปลงค่าใด ๆ ในองค์ประกอบใด ๆ จะปรากฏในรายการ n ทั้งหมด

สำหรับคำอธิบายเพิ่มเติมเพิ่มเติมได้ที่: https://www.geeksforgeeks.org/python-using-2d-arrays-lists-the-right-way/


3

ใช้ความคิดที่ง่ายที่สุดในการสร้างสิ่งนี้

wtod_list = []

และเพิ่มขนาด:

wtod_list = [[0 for x in xrange(10)] for x in xrange(10)]

หรือถ้าเราต้องการประกาศขนาดแรก เราใช้เท่านั้น:

   wtod_list = [[0 for x in xrange(10)] for x in xrange(10)]

1

เนื่องจาก @Arnab และ @Mike ชี้ให้เห็นว่าอาร์เรย์ไม่ใช่รายการ ความแตกต่างเล็กน้อยคือ 1) อาร์เรย์มีขนาดคงที่ในระหว่างการเริ่มต้น 2) อาร์เรย์โดยปกติจะสนับสนุนการดำเนินการที่น้อยกว่ารายการ

อาจจะ overkill ในกรณีส่วนใหญ่ แต่นี่คือการใช้งานอาร์เรย์ 2d ขั้นพื้นฐานที่ใช้ประโยชน์จากการใช้งานอาร์เรย์ฮาร์ดแวร์โดยใช้ python ctypes (ไลบรารี c)

import ctypes
class Array:
    def __init__(self,size,foo): #foo is the initial value
        self._size = size
        ArrayType = ctypes.py_object * size
        self._array = ArrayType()
        for i in range(size):
            self._array[i] = foo
    def __getitem__(self,index):
        return self._array[index]
    def __setitem__(self,index,value):
        self._array[index] = value
    def __len__(self):
        return self._size

class TwoDArray:
    def __init__(self,columns,rows,foo):
        self._2dArray = Array(rows,foo)
        for i in range(rows):
            self._2dArray[i] = Array(columns,foo)

    def numRows(self):
        return len(self._2dArray)
    def numCols(self):
        return len((self._2dArray)[0])
    def __getitem__(self,indexTuple):
        row = indexTuple[0]
        col = indexTuple[1]
        assert row >= 0 and row < self.numRows() \
               and col >=0 and col < self.numCols(),\
               "Array script out of range"
        return ((self._2dArray)[row])[col]

if(__name__ == "__main__"):
    twodArray = TwoDArray(4,5,5)#sample input
    print(twodArray[2,3])

1

สิ่งสำคัญที่ฉันเข้าใจคือ: ในขณะที่เริ่มต้นอาร์เรย์ (ในมิติใด ๆ ) เราควรให้ค่าเริ่มต้นกับทุกตำแหน่งของอาร์เรย์ จากนั้นการเริ่มต้นเท่านั้นจะเสร็จสมบูรณ์ หลังจากนั้นเราสามารถเปลี่ยนหรือรับค่าใหม่ไปยังตำแหน่งใด ๆ ของอาร์เรย์ รหัสด้านล่างทำงานให้ฉันอย่างสมบูรณ์แบบ

N=7
F=2

#INITIALIZATION of 7 x 2 array with deafult value as 0
ar=[[0]*F for x in range(N)]

#RECEIVING NEW VALUES TO THE INITIALIZED ARRAY
for i in range(N):
    for j in range(F):
        ar[i][j]=int(input())
print(ar)

1

หากคุณใช้numpyคุณสามารถสร้างอาร์เรย์ 2d ได้อย่างง่ายดาย:

import numpy as np

row = 3
col = 5
num = 10
x = np.full((row, col), num)

x

array([[10, 10, 10, 10, 10],
       [10, 10, 10, 10, 10],
       [10, 10, 10, 10, 10]])

1
row=5
col=5
[[x]*col for x in [b for b in range(row)]]

ด้านบนจะให้อาเรย์ 5x5 2D แก่คุณ

[[0, 0, 0, 0, 0],
 [1, 1, 1, 1, 1],
 [2, 2, 2, 2, 2],
 [3, 3, 3, 3, 3],
 [4, 4, 4, 4, 4]]

มันใช้ความเข้าใจในรายการซ้อน รายละเอียดดังต่อไปนี้:

[[x]*col for x in [b for b in range(row)]]

[x] * col -> นิพจน์สุดท้ายที่ประเมิน
สำหรับ x in -> x จะเป็นค่าที่กำหนดโดย iterator
[b สำหรับ b ในช่วง (แถว)]] -> Iterator

[b สำหรับ b อยู่ในช่วง (แถว)]] สิ่งนี้จะประเมินเป็น [0,1,2,3,4] ตั้งแต่แถว = 5
ดังนั้นตอนนี้มันจะทำให้

[[x]*col for x in [0,1,2,3,4]]

สิ่งนี้จะประเมินเป็น [[0] * 5 สำหรับ x ใน [0,1,2,3,4]] -> โดย x = 0 การวนซ้ำครั้งที่ 1
[[1] * 5 สำหรับ x ใน [0,1,2, 3,4]] -> ด้วย x = 1 ซ้ำ 2
[[2] * 5 สำหรับ x ใน [0,1,2,3,4]] -> กับ x = 2 ซ้ำ 3
[[3] * 5 สำหรับ x ใน [0,1,2,3,4]] -> กับ x = 3 ซ้ำ 4
[[4] * 5 สำหรับ x ใน [0,1,2,3,4]] -> ด้วย x = 4 ซ้ำ 5


0

นี่คือสิ่งที่ดีที่สุดที่ฉันพบสำหรับการสอนโปรแกรมเมอร์ใหม่และไม่ต้องใช้ห้องสมุดเพิ่มเติม ฉันต้องการบางสิ่งที่ดีกว่า

def initialize_twodlist(value):
    list=[]
    for row in range(10):
        list.append([value]*10)
    return list

0

นี่เป็นวิธีที่ง่ายกว่า:

import numpy as np
twoD = np.array([[]*m]*n)

สำหรับการเริ่มต้นเซลล์ทั้งหมดด้วยการใช้ค่า 'x':

twoD = np.array([[x]*m]*n

0

บ่อยครั้งที่ฉันใช้วิธีนี้ในการเริ่มต้นอาร์เรย์ 2 มิติ

n=[[int(x) for x in input().split()] for i in range(int(input())]


0

รูปแบบทั่วไปเพื่อเพิ่มมิติสามารถดึงมาจากซีรี่ส์นี้:

x = 0
mat1 = []
for i in range(3):
    mat1.append(x)
    x+=1
print(mat1)


x=0
mat2 = []
for i in range(3):
    tmp = []
    for j in range(4):
        tmp.append(x)
        x+=1
    mat2.append(tmp)

print(mat2)


x=0
mat3 = []
for i in range(3):
    tmp = []
    for j in range(4):
        tmp2 = []
        for k in range(5):
            tmp2.append(x)
            x+=1
        tmp.append(tmp2)
    mat3.append(tmp)

print(mat3)

ยินดีต้อนรับสู่ SO คำถามนี้มีคำตอบที่ได้รับการยอมรับอย่างหนาแน่นแล้ว ตั้งแต่แรกเห็นโพสต์นี้ไม่ตอบคำถาม ดูstackoverflow.com/help/how-to-answerสำหรับคำแนะนำ
Nick

0

คุณสามารถลอง [[0] * 10] * 10 นี่จะส่งคืนอาร์เรย์ 2d ของ 10 แถวและ 10 คอลัมน์ที่มีค่า 0 สำหรับแต่ละเซลล์


นี่เป็นคำตอบเดียวกับstackoverflow.com/a/25601284/2413201
Armali

2
สิ่งนี้จะสร้างอาเรย์ของ 10 พอยน์เตอร์ไปยังแถวเดียวกัน ถ้าคุณทำa = [[0]*10]*10แล้วa[0][0] = 1คุณจะเห็นองค์ประกอบแรกในแต่ละแถวตอนนี้เท่ากับ 1
andnik

0

lst = [[0] * m สำหรับ i อยู่ในช่วง (n)]

เริ่มต้นเมทริกซ์ทั้งหมด n = แถวและ m = คอลัมน์


คุณกรุณาจัดรูปแบบรหัสเป็นรหัสได้ไหม มันจะอ่านง่ายขึ้น
โทมัส

0

อีกวิธีคือใช้พจนานุกรมเพื่อเก็บอาเรย์สองมิติ

twoD = {}
twoD[0,0] = 0
print(twoD[0,0]) # ===> prints 0

เพียงแค่นี้ก็สามารถถือใด ๆ ค่า 1D, 2D และการเริ่มต้นนี้0หรือค่า int อื่น ๆ ใช้งานคอลเลกชัน

import collections
twoD = collections.defaultdict(int)
print(twoD[0,0]) # ==> prints 0
twoD[1,1] = 1
print(twoD[1,1]) # ==> prints 1

0

รหัส:

num_rows, num_cols = 4, 2
initial_val = 0
matrix = [[initial_val] * num_cols for _ in range(num_rows)]
print(matrix) 
# [[0, 0], [0, 0], [0, 0], [0, 0]]

initial_val จะต้องไม่เปลี่ยนรูป


-3
from random import randint
l = []

for i in range(10):
    k=[]
    for j in range(10):
        a= randint(1,100)
        k.append(a)

    l.append(k)




print(l)
print(max(l[2]))

b = []
for i in range(10):
    a = l[i][5]
    b.append(a)

print(min(b))

4
โปรดเพิ่มข้อความอธิบายสิ่งที่รหัสของคุณทำ
whackamadoodle3000

1
โดยปกติแล้วจะเป็นการดีกว่าที่จะอธิบายวิธีแก้ปัญหาแทนที่จะเพียงแค่โพสต์แถวของรหัสที่ไม่ระบุชื่อ คุณสามารถอ่านวิธีทำผมเขียนคำตอบที่ดีและยังอธิบายทั้งหมดตอบรหัสตาม
Massimiliano Kraus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.