Удаление определенной части печатного заявления [дубликат]

Очень подробное объяснение о копировании, прохождении и сравнении по значению и по ссылке содержится в в этой главе книги «JavaScript: окончательное руководство».

До мы оставляем тему манипуляции объектами и массивами по ссылке, нам нужно прояснить точку номенклатуры. Фраза «пройти по ссылке» может иметь несколько значений. Для некоторых читателей фраза относится к методу вызова функции, которая позволяет функции назначать новые значения своим аргументам и изменять эти измененные значения вне функции. Это не значит, что термин используется в этой книге. Здесь мы имеем в виду просто, что ссылка на объект или массив - не сам объект - передается функции. Функция может использовать ссылку для изменения свойств объекта или элементов массива. Но если функция перезаписывает ссылку ссылкой на новый объект или массив, эта модификация не видна вне функции. Читатели, знакомые с другим значением этого термина, могут предпочесть сказать, что объекты и массивы передаются по значению, но переданное значение на самом деле является ссылкой, а не самим объектом.

One вещь, которую я до сих пор не могу понять. Проверьте код ниже. Любые мысли?

function A() {}
A.prototype.foo = function() {
    return 'initial value';
}


function B() {}
B.prototype.bar = A.prototype.foo;

console.log(A.prototype.foo()); //initial value
console.log(B.prototype.bar()); //initial value

A.prototype.foo = function() {
    return 'changed now';
}

console.log(A.prototype.foo()); //changed now
console.log(B.prototype.bar()); //Why still 'initial value'???

33
задан mjv 8 March 2010 в 04:29
поделиться

7 ответов

>>> a=[1,2,3]
>>> a=[str(i) for i in a ]
>>> s=a[0]
>>> for i in a[1:-1]: s="%s,%s"%(s,i)
...
>>> s=s+","+a[-1]
>>> s
'1,2,3'
84
ответ дан ghostdog74 21 August 2018 в 12:58
поделиться
  • 1
    +1 для запоминания того, что вам нужно сначала преобразовать в str. – Chris Lutz 8 March 2010 в 04:29
  • 2
    +1 для хорошего кода, -1 для того, чтобы не помещать пробел между str и a. – Grant Paul 8 March 2010 в 05:33
  • 3
    я должен предположить, что вы шутите – Mike 8 March 2010 в 08:17
  • 4
    пространства для присосок – B T 10 July 2012 в 21:02
  • 5
    Как использовать это с полем объекта? поэтому вместо "a" У меня было бы «a.name». например? – Boyen 7 September 2016 в 14:54
84
ответ дан ghostdog74 1 November 2018 в 07:17
поделиться
 def stringTokenizer(sentense,delimiters):
     list=[]
     word=""
     isInWord=False
     for ch in sentense:
         if ch in delimiters:
             if isInWord: # start ow word
                 print(word)
                 list.append(word)
                 isInWord=False
         else:
             if not isInWord: # end of word
                 word=""
                 isInWord=True
             word=word+ch
     if isInWord: #  end of word at end of sentence
             print(word)
             list.append(word)
             isInWord=False
     return list

print (stringTokenizer (u "привет парни! я вам стихами, может быть, еще отвечу", ",!"))

-1
ответ дан A K 21 August 2018 в 12:58
поделиться
  • 1
    Я заменил образец строки, потому что это слишком оскорбительно для русского языка. – A K 23 October 2017 в 10:30

A ','.join, как было предложено в других ответах, является типичным решением Python; нормальный подход, который до сих пор я не вижу ни в одном из ответов,

print ','.join(str(x) for x in a)

известен как выражение генератора или ген xp.

Если вы предпочитаете цикл (или нужен один для других целей, если вы делаете больше, чем просто печать на каждом элементе, например), есть, конечно, также отличные альтернативы:

for i, x in enumerate(a):
  if i: print ',' + str(x),
  else: print str(x),

это первый переключатель (работает для любого итеративного a, списка или другого), поэтому он помещает запятую перед каждым элементом, кроме первого. Переключатель последнего времени немного менее изящный, и он работает только для итераций, у которых есть len() (не для полностью общих):

for i, x in enumerate(a):
  if i == len(a) - 1: print str(x)
  else: print str(x) + ',',

В этом примере также используется последний переключатель для завершения строки, когда она печатает последний элемент.

Встроенная функция enumerate очень часто полезна и стоит иметь в виду!

13
ответ дан Alex Martelli 21 August 2018 в 12:58
поделиться
  • 1
    перечисление - это хорошо, но в случае OP достаточно простого соединения. – ghostdog74 8 March 2010 в 06:06
  • 2
    Конечно, это то, с чего я начал (давая genexp в то время, когда в других ответах были карты, listcomps или нет конверсии в строку) - вы видели первый абзац этого ответа, возможно ?). Переключатели в первый раз и в прошлый раз более универсальны, и никакой другой ответ даже не упоминал об этом, поэтому я также решил указать их тоже (в том числе тот факт, что их лучше всего делать с помощью перечисления). – Alex Martelli 8 March 2010 в 06:13
  • 3
    Глядя на ваш ответ и глядя на ответ призрака, мне интересно. Понимает ли использование списка больше памяти, чем карта, из его примера, но является ли карта () медленнее, чем LH? Кстати, я рекомендовал вашу книгу кому-то, кто отправил мне по электронной почте помощь на Python :) – orokusaki 10 March 2010 в 05:33
  • 4
    @orokusaki, потребление памяти одинаково для карты и listcomp (ниже для genexp, что я и использую); genexp, как правило, немного медленнее (если у вас есть куча физической памяти, то есть, в противном случае потребление памяти listcomp и карты ухудшает их производительность), а карта иногда даже быстрее, чем listcomp (если только это не связано с использованием лямбда, что замедляет ее ). Ни одна из этих проблем с производительностью не является чем-то большим, если только вы не должны следить за своей памятью по какой-либо причине, и в этом случае синодальность linxp в памяти может быть biggie ;-). – Alex Martelli 10 March 2010 в 05:46
  • 5
    @ А, я даже не заметил, что вы остановились в скобках. Я вижу сейчас. Мне нравится идея использования genexp. Я бы предпочел, чтобы мои пользователи подождали лишнее .1 миллисекунды, чем уменьшилось количество одновременных запросов, которые я могу обрабатывать, забивая память. Не говоря уже о том, что, поскольку я не могу контролировать размер итерации, кто-то действительно может заткнуть ситуацию с версией listcomp. – orokusaki 10 March 2010 в 18:13
print ','.join(a)
0
ответ дан Ignacio Vazquez-Abrams 21 August 2018 в 12:58
поделиться
  • 1
    join не автоматически конвертирует ints в строки, поэтому это не сработает. – Sasha Chedygov 8 March 2010 в 06:20
  • 2
    @musicfreak Вам это кажется глупым, что он не str () автоматически? В конце концов, '.join () является методом String. Интересно, почему он не делает это бесплатно. – orokusaki 10 March 2010 в 18:15
  • 3
    @orokusaki: Это противоречит предписанию «Явный лучше, чем неявный». – Ignacio Vazquez-Abrams 10 March 2010 в 18:21

Это то, что join для.

','.join([str(elem) for elem in a])
2
ответ дан MatrixFrog 21 August 2018 в 12:58
поделиться
  • 1
    TypeError: sequence item 0: expected string, int found. Он не работает для ввода образца. – Ponkadoodle 8 March 2010 в 04:30
  • 2
    Правильно, извините. Он автоматически не преобразует int в строки. Исправлено с изящным пониманием списка. – MatrixFrog 8 March 2010 в 04:48
  • 3
    Не используйте понимание списка. Выньте [] s, и он создаст генератор, который будет работать так же хорошо, не создавая (потенциально большой) ненужный временный список. – Chris Lutz 8 March 2010 в 04:49

Есть два варианта:

Вы можете напрямую распечатать ответ, используя print(*a, sep=','), это будет использовать разделитель как «,» вы получите ответ как:

1,2,3

и еще один вариант:

print(','.join(str(x) for x in list(a)))

, это приведет к повторному перечню списка и печати (a) и печати вывода как

1,2,3
2
ответ дан Midhunlal 21 August 2018 в 12:58
поделиться
Другие вопросы по тегам:

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