web-dev-qa-db-ja.com

文字を分割せずに文字列をタプルに変換する

プロセスで文字列の文字を分割せずに、文字列をタプルに変換するように努めています。誰かがこれを行う簡単な方法を提案できますか?ライナーが1つ必要です。

失敗

   a = 'Quattro TT'
   print Tuple(a)

作品

  a = ['Quattro TT']  
  print Tuple(a)

私の入力は文字列であるため、文字列をリストに変換することにより以下のコードを試しました。リストは再び文字列を文字に分割します..

失敗

a = 'Quattro TT'
print Tuple(list(a))

期待される出力:

('Quattro TT')

生成された出力:

('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
35
Shankar

単に_(a,)_を実行できます。関数を使用する必要はありません。 (コンマが必要であることに注意してください。)

基本的に、Tuple(a)は、aだけで構成されるタプルではなく、aの-​​contentsのタプルを作成することを意味します。文字列の「内容」(繰り返し処理を行うと得られるもの)はその文字であるため、文字に分割されます。

58
BrenBarn

タプルに関するPythonチュートリアル をご覧ください:

特別な問題は、0個または1個のアイテムを含むタプルの構築です。構文には、これらに対応するためのいくつかの余分な癖があります。空のタプルは、空の括弧のペアで構成されます。 1つの項目を持つタプルは、値の後にコンマを付けて構成されます(単一の値を括弧で囲むだけでは不十分です)。 glyいですが、効果的です。例えば:

_>>> empty = ()
>>> singleton = 'hello',    # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
_

文字列オブジェクトを括弧で囲むと、その式は 括弧で囲まれた式 (強調が追加されます)にのみ変換されます。

括弧で囲まれた式リストは、その式リストが生成するものを生成します。リストに少なくとも1つのコンマが含まれている場合、Tupleを生成します。そうでない場合は、式リストを構成する単一の式が生成されます。

空の括弧のペアは、空のTupleオブジェクトを生成します。タプルは不変であるため、リテラルのルールが適用されます(つまり、空のタプルが2回出現しても同じオブジェクトが生成される場合と生成されない場合があります)。

タプルは括弧ではなく、コンマ演算子を使用して形成されることに注意してください。例外は空のタプルで、括弧が必要です—式に括弧なしの「なし」を許可すると、あいまいさが生じ、一般的なタイプミスがキャッチされずに通過できます。

つまり(Python 2.7)と仮定すると、

_a = 'Quattro TT'
print Tuple(a)        # <-- you create a Tuple from a sequence 
                      #     (which is a string)
print Tuple([a])      # <-- you create a Tuple from a sequence 
                      #     (which is a list containing a string)
print Tuple(list(a))  # <-- you create a Tuple from a sequence 
                      #     (which you create from a string)
print (a,)            # <-- you create a Tuple containing the string
print (a)             # <-- it's just the string wrapped in parentheses
_

出力は期待どおりです。

_('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
('Quattro TT',)
('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
('Quattro TT',)
Quattro TT
_

印刷ステートメントにメモを追加します。 Python 2.7(print (a,)のように)の print ステートメントの一部として単一要素のタプルを作成しようとすると、使用する必要があります括弧で囲まれた形式。_print a,_の末尾のカンマは、そうでなければprintステートメントの一部と見なされ、その結果、タプルではなく出力から改行が抑制されます。

Printステートメントがコンマで終了しない限り、「\ n」文字が最後に書き込まれます。

In Python 3.x上記の例のほとんどの使用法では、実際にSyntaxErrorが発生します。なぜなら、Python 3 print関数になります (追加の括弧のペアを追加する必要があります)しかし、特にこれは混乱を引き起こす可能性があります:

_print (a,)            # <-- this prints a Tuple containing `a` in Python 2.x
                      #     but only `a` in Python 3.x
_
16
moooeeeep

この関数を使用して文字列をタプルに変換します

import ast

def parse_Tuple(string):
    try:
        s = ast.literal_eval(str(string))
        if type(s) == Tuple:
            return s
        return
    except:
        return

使用法

parse_Tuple('("A","B","C",)')  # Result: ('A', 'B', 'C')



あなたの場合、あなたは

value = parse_Tuple("('%s',)" % a)
5
Shameem

文字列「Quattro」と「TT」の各部分をリストの要素に割り当てるタプルを作成する方法を知りたい人がここに来た場合に備えて、このprint Tuple(a.split())のようになります

5
igorgruiz

次のソリューションを使用できます。

s="jack"

tup=Tuple(s.split(" "))

output=('jack')
2
sameer_nubia

これらのサブクラスインスタンスの一部が1文字列インスタンスである必要がある可能性のあるTupleをサブクラス化すると、興味深いことが発生します。

class Sequence( Tuple ):
    def __init__( self, *args ):
        # initialisation...
        self.instances = []

    def __new__( cls, *args ):
        for arg in args:
            assert isinstance( arg, unicode ), '# arg %s not unicode' % ( arg, )
        if len( args ) == 1:
            seq = super( Sequence, cls ).__new__( cls, ( args[ 0 ], ) )
        else:
            seq = super( Sequence, cls ).__new__( cls, args )
        print( '# END new Sequence len %d' % ( len( seq ), ))
        return seq

このスレッドから学んだように、args[ 0 ]の後にコンマを置く必要があります。

印刷行は、単一の文字列が分割されないことを示しています。

NBサブクラスのコンストラクターのコンマはオプションになりました:

Sequence( u'silly' )

または

Sequence( u'silly', )
0
mike rodent