โดยทั่วไปฉันต้องการ python เทียบเท่ากับสิ่งนี้ใน C:
int a[x];
แต่ใน python ฉันประกาศอาร์เรย์เช่น:
a = []
และปัญหาคือฉันต้องการกำหนดช่องสุ่มด้วยค่าเช่น:
a[4] = 1
แต่ฉันไม่สามารถทำได้ด้วย python เนื่องจากอาร์เรย์ว่างเปล่า
โดยทั่วไปฉันต้องการ python เทียบเท่ากับสิ่งนี้ใน C:
int a[x];
แต่ใน python ฉันประกาศอาร์เรย์เช่น:
a = []
และปัญหาคือฉันต้องการกำหนดช่องสุ่มด้วยค่าเช่น:
a[4] = 1
แต่ฉันไม่สามารถทำได้ด้วย python เนื่องจากอาร์เรย์ว่างเปล่า
คำตอบ:
คุณไม่สามารถทำสิ่งที่คุณต้องการใน Python ได้ (ถ้าฉันอ่านคุณถูกต้อง) คุณต้องใส่ค่าสำหรับแต่ละองค์ประกอบของรายการ (หรือที่คุณเรียกว่าอาร์เรย์)
แต่ลองสิ่งนี้:
a = [0 for x in range(N)] # N = size of list you want
a[i] = 5 # as long as i < N, you're okay
สำหรับรายการประเภทอื่น ๆ ให้ใช้สิ่งที่นอกเหนือจาก 0 None
มักจะเป็นตัวเลือกที่ดีเช่นกัน
range(N)
จะสร้างรายการขึ้นมาแล้วถ้า Python <3.0
xrange(N)
ใน Python 2.x. ฉันไม่แน่ใจว่ามันมีพรมแดนติดกับสิ่งที่ไม่ถูกต้องอย่างไร ฉันชอบa = range(N)
เพราะทุกองค์ประกอบเริ่มต้นด้วย "ค่าเริ่มต้น" ที่สมเหตุสมผล ฉันเดาว่ามันเป็นเรื่องของความคิดเห็น
คุณสามารถใช้ numpy:
import numpy as np
ตัวอย่างจากEmpty Array :
np.empty([2, 2])
array([[ -9.74499359e+001, 6.69583040e-309],
[ 2.13182611e-314, 3.06959433e-309]])
เพียงแค่ประกาศรายชื่อและต่อท้ายแต่ละองค์ประกอบ สำหรับเช่น:
a = []
a.append('first item')
a.append('second item')
นอกจากนี้คุณยังสามารถขยายได้ด้วยวิธีการขยายรายการ
a= []
a.extend([None]*10)
a.extend([None]*20)
หากคุณ (หรือผู้ค้นหาอื่น ๆ ของคำถามนี้) สนใจที่จะสร้างอาร์เรย์ที่ต่อเนื่องกันเพื่อเติมเต็มด้วยจำนวนเต็มให้พิจารณาbytearrayและmemoryivew :
# cast() is available starting Python 3.3
size = 10**6
ints = memoryview(bytearray(size)).cast('i')
ints.contiguous, ints.itemsize, ints.shape
# (True, 4, (250000,))
ints[0]
# 0
ints[0] = 16
ints[0]
# 16
x=[]
for i in range(0,5):
x.append(i)
print(x[i])
หากคุณต้องการอาร์เรย์สไตล์ C จริงๆ
import array
a = array.array('i', x * [0])
a[3] = 5
try:
[5] = 'a'
except TypeError:
print('integers only allowed')
โปรดทราบว่าไม่มีแนวคิดของตัวแปรที่ไม่ได้เริ่มต้นใน python ตัวแปรคือชื่อที่ผูกไว้กับค่าดังนั้นค่านั้นจะต้องมีบางอย่าง ในตัวอย่างด้านบนอาร์เรย์เริ่มต้นด้วยศูนย์
อย่างไรก็ตามนี่เป็นเรื่องผิดปกติใน python เว้นแต่คุณจะต้องการมันสำหรับของระดับต่ำ ในกรณีส่วนใหญ่คุณควรเลือกใช้รายการว่างหรืออาร์เรย์ numpy ว่างเปล่าตามที่คำตอบอื่น ๆ แนะนำ
a = [obj] * N
คือ obj เดียวกันจะปรากฏในแต่ละองค์ประกอบของอาร์เรย์ หากเป็น obj ที่ไม่แน่นอนและคุณแก้ไขรายการหนึ่งรายการทั้งหมดจะเปลี่ยนไป ... แต่สำหรับตัวอย่างนี้โดยใช้จำนวนเต็ม (หรือชนิดอื่น ๆ ที่ไม่เปลี่ยนรูป) จะไม่แตกต่างกัน หรือถ้าคุณแค่กำหนดให้กับองค์ประกอบก็ไม่ใช่ปัญหาเช่นกัน (ฉันพูดถึงมันเพราะฉันทำบ่อยเกินไปแล้ว :))