web-dev-qa-db-ja.com

Pythonで文字列配列を作成する最良の方法は何ですか?

私はPythonが比較的新しく、それはライブラリーであり、事前に設定されたサイズの文字列配列をどのように作成するのか疑問に思っていました。 Javaでは簡単ですが、Pythonでこれをどのようにすればよいのか疑問に思っていました。

これまでのところ、考えられるのは

strs = ['']*size

また、文字列メソッドを呼び出しようとすると、デバッガーによってエラーXがオブジェクトTupleに存在しないというエラーが表示されます。

そして、それがJavaにあった場合、これは私がやりたいことです。

String[] ar = new String[size];
Arrays.fill(ar,"");

助けてください。

エラーコード

    strs[sum-1] = strs[sum-1].strip('\(\)')
AttributeError: 'Tuple' object has no attribute 'strip'

質問:Java in Pythonで通常できることを、コードをクリーンに保ちながらどうすればよいでしょうか。

38

Pythonでは、あなたがやろうとしていることを通常はしません。ただし、次のコードで実行できます。

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

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、リストを固定サイズに強制 。これにより、固定サイズの両端キューを作成できます。新しい値が末尾に追加されると、最初の要素(両端キューの先頭)が削除され、新しいアイテムが両端キューに追加されます。これはあなたが必要とするもののために働くかもしれませんが、これがPythonの「規範」と見なされるとは思わない.

21
pseudoramble

簡単な答えは、「あなたはしない」です。固定長にする必要がある時点で、古い習慣に固執するか、独自の制約セットを使用して非常に具体的な問題を記述します。

8
Alex R

このようなことをしようとしていますか?

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

時々、空のchar配列が必要です。後でcharを入力するとエラーが報告されるため、「np.empty(size)」を実行できません。それから私は通常非常に不器用なことをしますが、それはまだそれを行う方法の1つです。

# 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'

これの悪い点は、配列にデフォルト値があることです(変更を忘れた場合)。

0
Shuo Yang
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はWordの文字と一致することを意味し、a|baまたはbのいずれかと一致することを意味し、\bはWordの境界を表します

0
angela

しかし、固定サイズを使用する理由は何ですか? pythonには固定サイズの配列(リスト)を実際に使用する必要がないため、追加を使用してサイズを大きくしたり、ポップを使用して拡大または縮小したり、少なくともスライスを使用したりできます。

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

エラーメッセージはそれをすべて言っています:strs[sum-1]は文字列ではなくタプルです。あなたのコードをもっと見せれば、誰かがおそらくあなたを助けることができるでしょう。それなしでは、推測しかできません。

0
pillmuncher

pythonに文字列配列を作成するための最良かつ最も便利な方法は、NumPyライブラリを使用することです。

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

これにより、すべてのエントリを空の文字列として持つ配列が作成されます。その後、インデックス付けまたはスライスを使用して配列を初期化できます。

0
Lov Verma