วิธี Pythonic สำหรับสิ่งนี้คือ:
x = [None] * numElements
หรือค่าเริ่มต้นใด ๆ ที่คุณต้องการจะเติมด้วยเช่น
bottles = [Beer()] * 99
sea = [Fish()] * many
vegetarianPizzas = [None] * peopleOrderingPizzaNotQuiche
[แก้ไข: ข้อแม้ Emptor[Beer()] * 99ไวยากรณ์สร้างหนึ่ง Beerแล้ว populates อาร์เรย์ 99 อ้างอิงถึงเช่นเดียวเดียวกัน]
วิธีการเริ่มต้นของ Python นั้นค่อนข้างมีประสิทธิภาพแม้ว่าประสิทธิภาพนั้นจะลดลงเมื่อคุณเพิ่มจำนวนองค์ประกอบ
เปรียบเทียบ
import time
class Timer(object):
    def __enter__(self):
        self.start = time.time()
        return self
    def __exit__(self, *args):
        end = time.time()
        secs = end - self.start
        msecs = secs * 1000  # millisecs
        print('%fms' % msecs)
Elements   = 100000
Iterations = 144
print('Elements: %d, Iterations: %d' % (Elements, Iterations))
def doAppend():
    result = []
    i = 0
    while i < Elements:
        result.append(i)
        i += 1
def doAllocate():
    result = [None] * Elements
    i = 0
    while i < Elements:
        result[i] = i
        i += 1
def doGenerator():
    return list(i for i in range(Elements))
def test(name, fn):
    print("%s: " % name, end="")
    with Timer() as t:
        x = 0
        while x < Iterations:
            fn()
            x += 1
test('doAppend', doAppend)
test('doAllocate', doAllocate)
test('doGenerator', doGenerator)
กับ
#include <vector>
typedef std::vector<unsigned int> Vec;
static const unsigned int Elements = 100000;
static const unsigned int Iterations = 144;
void doAppend()
{
    Vec v;
    for (unsigned int i = 0; i < Elements; ++i) {
        v.push_back(i);
    }
}
void doReserve()
{
    Vec v;
    v.reserve(Elements);
    for (unsigned int i = 0; i < Elements; ++i) {
        v.push_back(i);
    }
}
void doAllocate()
{
    Vec v;
    v.resize(Elements);
    for (unsigned int i = 0; i < Elements; ++i) {
        v[i] = i;
    }
}
#include <iostream>
#include <chrono>
using namespace std;
void test(const char* name, void(*fn)(void))
{
    cout << name << ": ";
    auto start = chrono::high_resolution_clock::now();
    for (unsigned int i = 0; i < Iterations; ++i) {
        fn();
    }
    auto end = chrono::high_resolution_clock::now();
    auto elapsed = end - start;
    cout << chrono::duration<double, milli>(elapsed).count() << "ms\n";
}
int main()
{
    cout << "Elements: " << Elements << ", Iterations: " << Iterations << '\n';
    test("doAppend", doAppend);
    test("doReserve", doReserve);
    test("doAllocate", doAllocate);
}
ใน Windows 7 i7 ของฉัน Python 64 บิตให้
Elements: 100000, Iterations: 144
doAppend: 3587.204933ms
doAllocate: 2701.154947ms
doGenerator: 1721.098185ms
ขณะที่ C ++ ให้ (สร้างด้วย MSVC, 64- บิต, เปิดใช้งานการปรับให้เหมาะสมที่สุด)
Elements: 100000, Iterations: 144
doAppend: 74.0042ms
doReserve: 27.0015ms
doAllocate: 5.0003ms
สร้างการดีบัก C ++:
Elements: 100000, Iterations: 144
doAppend: 2166.12ms
doReserve: 2082.12ms
doAllocate: 273.016ms
ประเด็นก็คือเมื่อใช้ Python คุณจะสามารถปรับปรุงประสิทธิภาพได้ 7-8% และถ้าคุณคิดว่าคุณกำลังเขียนแอพที่มีประสิทธิภาพสูง (หรือถ้าคุณกำลังเขียนสิ่งที่ใช้ในบริการเว็บหรืออะไรก็ตาม) ที่ไม่ควรสูดดม แต่คุณอาจต้องคิดใหม่เกี่ยวกับภาษาที่คุณเลือก
นอกจากนี้รหัส Python ที่นี่ไม่ใช่รหัส Python จริงๆ การเปลี่ยนเป็นรหัส Pythonesque อย่างแท้จริงให้ประสิทธิภาพที่ดีกว่า:
import time
class Timer(object):
    def __enter__(self):
        self.start = time.time()
        return self
    def __exit__(self, *args):
        end = time.time()
        secs = end - self.start
        msecs = secs * 1000  # millisecs
        print('%fms' % msecs)
Elements   = 100000
Iterations = 144
print('Elements: %d, Iterations: %d' % (Elements, Iterations))
def doAppend():
    for x in range(Iterations):
        result = []
        for i in range(Elements):
            result.append(i)
def doAllocate():
    for x in range(Iterations):
        result = [None] * Elements
        for i in range(Elements):
            result[i] = i
def doGenerator():
    for x in range(Iterations):
        result = list(i for i in range(Elements))
def test(name, fn):
    print("%s: " % name, end="")
    with Timer() as t:
        fn()
test('doAppend', doAppend)
test('doAllocate', doAllocate)
test('doGenerator', doGenerator)
ซึ่งจะช่วยให้
Elements: 100000, Iterations: 144
doAppend: 2153.122902ms
doAllocate: 1346.076965ms
doGenerator: 1614.092112ms
(ใน doGenerator แบบ 32 บิตทำได้ดีกว่า doAllocate)
ที่นี่ช่องว่างระหว่าง doAppend และ doAllocate มีขนาดใหญ่กว่าอย่างมาก
เห็นได้ชัดว่าความแตกต่างที่นี่มีผลเฉพาะเมื่อคุณทำสิ่งนี้มากกว่าหนึ่งครั้งหรือหากคุณกำลังทำสิ่งนี้บนระบบที่มีการโหลดจำนวนมากซึ่งตัวเลขเหล่านั้นจะถูกลดขนาดโดยคำสั่งของขนาดหรือถ้าคุณกำลังติดต่อกับ รายการที่มีขนาดใหญ่มาก
จุดที่นี่: ทำมันด้วยวิธีไพทอนเพื่อประสิทธิภาพที่ดีที่สุด
แต่ถ้าคุณกังวลเรื่องประสิทธิภาพทั่วไปในระดับสูง Python เป็นภาษาที่ผิด ปัญหาพื้นฐานที่สุดคือการเรียกใช้ฟังก์ชั่นของ Python นั้นช้ากว่าภาษาอื่นถึง 300x เนื่องจากคุณสมบัติของ Python เช่น decorators etc ( https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Data_Aggregation#Data_Aggregation )