Ответ 1
В python вы обычно не будете делать то, что вы пытаетесь сделать. Но ниже код будет делать это:
strs = ["" for x in range(size)]
Я относительно новичок в Python и его библиотеках, и мне было интересно, как создать массив строк с заданным размером. Это легко в java, но мне было интересно, как я могу это сделать в python.
Пока все, о чем я могу думать,
strs = ['']*size
И некоторые, когда я пытаюсь вызвать на нем строковые методы, отладчик дает мне ошибку. Операция X не существует в объектном кортеже.
И если это было в java, это то, что я хотел бы сделать.
String[] ar = new String[size];
Arrays.fill(ar,"");
Пожалуйста, помогите.
Код ошибки
strs[sum-1] = strs[sum-1].strip('\(\)')
AttributeError: 'tuple' object has no attribute 'strip'
Вопрос. Как я могу делать то, что я обычно могу делать в Java на Python, сохраняя при этом код чистым.
В python вы обычно не будете делать то, что вы пытаетесь сделать. Но ниже код будет делать это:
strs = ["" for x in range(size)]
В Python тенденция обычно заключается в том, что можно использовать список нефиксированных размеров (то есть элементы могут быть добавлены/удалены для него динамически). Если бы вы следовали этому примеру, не нужно было бы заранее выделять сборку фиксированного размера и заполнять ее пустыми значениями. Скорее, поскольку вы получаете или создаете строки, вы просто добавляете их в список. Когда приходит время для удаления значений, вы просто удаляете соответствующее значение из строки. Я бы предположил, что вы, вероятно, можете использовать эту технику для этого. Например (в синтаксисе Python 2.x):
>>> temp_list = []
>>> print temp_list
[]
>>>
>>> temp_list.append("one")
>>> temp_list.append("two")
>>> print temp_list
['one', 'two']
>>>
>>> temp_list.append("three")
>>> print temp_list
['one', 'two', 'three']
>>>
Конечно, в некоторых ситуациях может потребоваться нечто более конкретное. В вашем случае хорошей идеей может быть использование deque. Посмотрите сообщение здесь: Python, заставив список фиксированному размеру. При этом вы можете создать deque с фиксированным размером. Если к концу добавляется новое значение, первый элемент (head deque) удаляется, а новый элемент добавляется к deque. Это может работать для того, что вам нужно, но я не считаю, что это считается "нормой" для Python.
Простой ответ: "У вас нет". В тот момент, когда вам нужно что-то фиксированное, вы либо застряли на старых привычках, либо писали для очень конкретной проблемы с собственным уникальным набором ограничений.
Но зачем использовать фиксированный размер? В python нет необходимости использовать массивы (списки) с фиксированными размерами, поэтому у вас всегда есть возможность увеличить его размер с помощью добавления, расширения или уменьшения с помощью pop, или, по крайней мере, вы можете использовать slicing.
x = ['' for x in xrange(10)]
Вы пытаетесь сделать что-то вроде этого?
>>> strs = [s.strip('\(\)') for s in ['some\\', '(list)', 'of', 'strings']]
>>> strs
['some', 'list', 'of', 'strings']
Самый лучший и удобный способ создания строкового массива в python - с помощью библиотеки NumPy.
Пример:
import numpy as np
arr = np.chararray((rows, columns))
Это создаст массив, содержащий все записи как пустые строки. Затем вы можете инициализировать массив, используя индексирование или нарезку.
В сообщении об ошибке говорится все: strs[sum-1]
- это кортеж, а не строка. Если вы покажете больше своего кода, кто-то, вероятно, сможет вам помочь. Без этого мы можем только догадываться.
Иногда мне нужен пустой массив char. Вы не можете сделать "np.empty(size)", потому что сообщение об ошибке будет сообщено, если вы позже заполните char. Затем я обычно делаю что-то довольно неуклюжие, но это еще один способ сделать это:
# Suppose you want a size N char array
charlist = [' ']*N # other preset character is fine as well, like 'x'
chararray = np.array(charlist)
# Then you change the content of the array
chararray[somecondition1] = 'a'
chararray[somecondition2] = 'b'
Плохая часть этого заключается в том, что ваш массив имеет значения по умолчанию (если вы забыли их изменить).
def _remove_regex(input_text, regex_pattern):
findregs = re.finditer(regex_pattern, input_text)
for i in findregs:
input_text = re.sub(i.group().strip(), '', input_text)
return input_text
regex_pattern = r"\buntil\b|\bcan\b|\bboat\b"
_remove_regex("row and row and row your boat until you can row no more", regex_pattern)
\w
означает, что он соответствует символам слов, a|b
означает соответствие либо a
, либо b
, \b
представляет границу слова
Если вы хотите создать список Python, который действует как многомерный массив пустых строк, вы можете сделать что-то вроде этого:
string_array = [[""] * num_cols] * num_rows
Доступ к таким элементам, как: string_array[row][col]