Подтвердить что ты не робот

Каков наилучший способ создания массива строк в python?

Я относительно новичок в 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, сохраняя при этом код чистым.

4b9b3361

Ответ 1

В python вы обычно не будете делать то, что вы пытаетесь сделать. Но ниже код будет делать это:

strs = ["" for x in range(size)]

Ответ 2

В 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.

Ответ 3

Простой ответ: "У вас нет". В тот момент, когда вам нужно что-то фиксированное, вы либо застряли на старых привычках, либо писали для очень конкретной проблемы с собственным уникальным набором ограничений.

Ответ 4

Но зачем использовать фиксированный размер? В python нет необходимости использовать массивы (списки) с фиксированными размерами, поэтому у вас всегда есть возможность увеличить его размер с помощью добавления, расширения или уменьшения с помощью pop, или, по крайней мере, вы можете использовать slicing.

x = [''  for x in xrange(10)]

Ответ 5

Вы пытаетесь сделать что-то вроде этого?

>>> strs = [s.strip('\(\)') for s in ['some\\', '(list)', 'of', 'strings']]
>>> strs 
['some', 'list', 'of', 'strings']

Ответ 6

Самый лучший и удобный способ создания строкового массива в python - с помощью библиотеки NumPy.

Пример:

import numpy as np
arr = np.chararray((rows, columns))

Это создаст массив, содержащий все записи как пустые строки. Затем вы можете инициализировать массив, используя индексирование или нарезку.

Ответ 7

В сообщении об ошибке говорится все: strs[sum-1] - это кортеж, а не строка. Если вы покажете больше своего кода, кто-то, вероятно, сможет вам помочь. Без этого мы можем только догадываться.

Ответ 8

Иногда мне нужен пустой массив 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'

Плохая часть этого заключается в том, что ваш массив имеет значения по умолчанию (если вы забыли их изменить).

Ответ 9

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 представляет границу слова

Ответ 10

Если вы хотите создать список Python, который действует как многомерный массив пустых строк, вы можете сделать что-то вроде этого:

string_array = [[""] * num_cols] * num_rows

Доступ к таким элементам, как: string_array[row][col]