Как я могу генерировать копии листа, меняя значение ячейки каждый раз с помощью цикла?

Мне пришлось опубликовать это по аналогичному вопросу, пока мой рейтинг репутации не подскочил (спасибо тому, кто наткнулся на меня!).

Все эти решения игнорируют один из способов сделать этот запуск значительно быстрее, а именно, используя небуферизованный (необработанный) интерфейс, используя bytearrays и делая собственную буферизацию. (Это применимо только к Python 3. В Python 2 необработанный интерфейс может использоваться или не использоваться по умолчанию, но в Python 3 вы по умолчанию в Unicode.)

Использование модифицированной версии Я считаю, что следующий код быстрее (и немного больше pythonic), чем любое из предлагаемых решений:

def rawcount(filename):
    f = open(filename, 'rb')
    lines = 0
    buf_size = 1024 * 1024
    read_f = f.raw.read

    buf = read_f(buf_size)
    while buf:
        lines += buf.count(b'\n')
        buf = read_f(buf_size)

    return lines

Используя отдельную функцию генератора, это быстрее запускает smidge:

def _make_gen(reader):
    b = reader(1024 * 1024)
    while b:
        yield b
        b = reader(1024*1024)

def rawgencount(filename):
    f = open(filename, 'rb')
    f_gen = _make_gen(f.raw.read)
    return sum( buf.count(b'\n') for buf in f_gen )

Это можно сделать полностью с выражениями генераторов in-line, использующими itertools, но это выглядит довольно странно:

from itertools import (takewhile,repeat)

def rawincount(filename):
    f = open(filename, 'rb')
    bufgen = takewhile(lambda x: x, (f.raw.read(1024*1024) for _ in repeat(None)))
    return sum( buf.count(b'\n') for buf in bufgen )

Вот мои тайминги:

function      average, s  min, s   ratio
rawincount        0.0043  0.0041   1.00
rawgencount       0.0044  0.0042   1.01
rawcount          0.0048  0.0045   1.09
bufcount          0.008   0.0068   1.64
wccount           0.01    0.0097   2.35
itercount         0.014   0.014    3.41
opcount           0.02    0.02     4.83
kylecount         0.021   0.021    5.05
simplecount       0.022   0.022    5.25
mapcount          0.037   0.031    7.46
-1
задан Luis 21 January 2019 в 18:06
поделиться

1 ответ

Попробуйте это:

Функция getValues ​​() возвращает двумерный массив Objec [] []

function createEmployeeSheets() {
  var ss = SpreadsheetApp.getActive();
  var shLista = ss.getSheetByName('Lista');
  var rgEData = shLista.getRange(1,3);
  var eData=rgEData.getValue();//the number of names I think
  var employeeDataRange = ssLista.getRange(2,1,eData,1);//Sheet names in column1 starting from row2
  var employeeObjects = employeeDataRange.getValues();//sheet names in column 0
  var template=ss.getSheetByName('Generador');//template
  for (var i=0;i< employeeObjects.length; i++) {
    if(!ss.getSheetByName(employeeObjects[i][0])){
      template.getRange("K3").setValue(employeeObjects[i][0]);
      var sheet=ss.insertSheet(employeeObjects[i][0], {template:template});
    }
  }
}

Этот код не был проверен.

0
ответ дан Cooper 21 January 2019 в 18:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: