Pythonのデータ型とは何ですか?

烟雨青岚
烟雨青岚オリジナル
2020-07-13 09:51:0846691ブラウズ

Python のデータ型には 8 種類あります。数値型 (int およびlong)、float 型、複合型 (complex)、string 型、list 型、tuple 型、dictionary 型、Boolean 型 (True および False) )。

Pythonのデータ型とは何ですか?

#Python のデータ型には次の 8 種類があります

#数値型

intとlong

intとlongを一緒にする理由は、python3.x以降はintとlongの区別がなくなり、一律にintが使用されるためです。 python2.x はまだ異なります。 Python2.7 を例に挙げます:

>>> i = 10  
>>> type(i)  
<type &#39;int&#39;>
>>> i=10000000000  
>>> type(i)  
<type &#39;long&#39;>

それでは、なぜ 10 が int で、10000000000 が long なのかというと、これは int の最大値に関係しています。int 型の最大値は 231-1 です。 2147483647 の場合は、sys.maxint を使用することもできます。

>>> 2**31-1  
2147483647L  
>>> sys.maxint  
2147483647

なぜ上記の方法で得られる値がlong型(数字の後ろに'L'が付くとlong型)になるのかと言うと、2**31の値が2147483648でlong型だからです。 long型から1を引いてもlongですが、実はint型の最大値は2147483647

>>> type(2147483647)  
<type &#39;int&#39;>  
>>> type(2147483648)  
<type &#39;long&#39;>

float型

float型になります。浮動小数点数は端的に言えば小数点を持つ数値であり、その精度はマシンに依存します。例:

>>> i = 10000.1212  
>>> type(i)  
<type &#39;float&#39;>

complex: 複数形。 の具体的な意味と使用法については、関連ドキュメントを確認してください。

文字列型

文字列を宣言するには、一重引用符、二重引用符、三重引用符 (3 つの一重引用符または 3 つの二重引用符を含む) の 3 つの方法があります。例:

>>> str1 = &#39;hello world&#39;  
>>> str2 = "hello world"  
>>> str3 = &#39;&#39;&#39;hello world&#39;&#39;&#39;  
>>> str4 = """hello world"""  
>>> print str1  
hello world  
>>> print str2  
hello world  
>>> print str3  
hello world  
>>> print str4  
hello world

Python の文字列には、str 型と unicode 型の 2 つのデータ型があります。 str 型は ASCII エンコーディングを使用するため、中国語を表現できません。

Unicode タイプは Unicode エンコードを使用し、中国語やその他の言語を含む任意の文字を表すことができます。

そして、Python には C 言語のような char 型はなく、単一の文字であっても string 型です。デフォルトで文字列に使用される ASCII エンコーディング。Unicode タイプとして宣言する場合は、文字列の前に 'u' または 'U' を追加する必要があります。例:

>>> str1 = "hello"  
>>> print str1  
hello  
>>> str2 = u"中国"  
>>> print str2  
中国

プロジェクトでは文字列の操作が頻繁に発生し、文字列エンコードの問題によって多くの問題が発生するため、文字列エンコードの問題について説明します。

Python を扱う過程では、ASCII、Unicode、UTF-8 という 3 つのエンコーディングに遭遇することがよくあります。詳しい紹介はこちらの記事をご覧ください。

私の単純な理解は、ASCII エンコードは英語の文字に適しており、Unicode は英語以外の文字 (中国語、韓国語など) に適しており、utf-8 は Uncode の保存および送信形式であるということです。再エンコード(8ビット単位でエンコード)例:

u = u&#39;汉&#39;  
print repr(u) # u&#39;\u6c49&#39;  
s = u.encode(&#39;UTF-8&#39;)  
print repr(s) # &#39;\xe6\xb1\x89&#39;  
u2 = s.decode(&#39;UTF-8&#39;)  
print repr(u2) # u&#39;\u6c49&#39;  
解释:声明unicode字符串”汉“,它的unicode编码为”\u6c49“,经过utf-8编码转换后,它的编码变成”\xe6\xb1\x89“。

コーディング経験の要約:

1. Python ファイルのヘッダーでエンコード形式を宣言します;

#-*- coding: utf-8 -*-

2.文字列 Unicode 型として宣言されています。つまり、文字列の前に u または U を追加します;

3. ファイルの読み取りおよび書き込み操作には、組み込みの open( の代わりに codecs.open() を使用することをお勧めします。 ). 1 つの原則に従い、どのフォーマットを使用するか 1 つのフォーマットで書き込み、どのフォーマットを読み取るか;

ANSI フォーマットで保存されたテキスト ファイルに複数の単語「中国語文字」があると仮定します。コードを直接実行し、それを GUI または IDE で読みたい場合 (たとえば、Sublime Text または pydev で) IDE で印刷すると、コーデックがエンコーディングに従ってコンテンツを読み取るため、文字化けまたは例外が表示されます。テキスト自体の形式:

f = codecs.open("d:/test.txt")  
content = f.read()  
f.close()  
print content

Change 次の方法を使用します (中国語でのみ機能します):

# -*- coding: utf-8 -*-  
  
import codecs  
  
f = codecs.open("d:/test.txt")  
content = f.read()  
f.close()  
  
if isinstance(content,unicode):  
    print content.encode(&#39;utf-8&#39;)  
    print "utf-8"  
else:  
    print content.decode(&#39;gbk&#39;).encode(&#39;utf-8&#39;)

List type

リストは変更可能なコレクション型であり、その要素は数値や文字列などの基本型、リスト、タプル、辞書などのコレクション オブジェクト、さらにはカスタム型にすることができます。次のように定義されます:

>>> nums = [1,2,3,4]  
>>> type(nums)  
<type &#39;list&#39;>  
>>> print nums  
[1, 2, 3, 4]  
>>> strs = ["hello","world"]  
>>> print strs  
[&#39;hello&#39;, &#39;world&#39;]  
>>> lst = [1,"hello",False,nums,strs]  
>>> type(lst)  
<type &#39;list&#39;>  
>>> print lst  
[1, &#39;hello&#39;, False, [1, 2, 3, 4], [&#39;hello&#39;, &#39;world&#39;]]

インデックスを使用してリスト要素にアクセスします。インデックスは 0 から始まり、負のインデックスをサポートし、-1 が最後のインデックスです。

>>> lst = [1,2,3,4,5]  
>>> print lst[0]  
>>> print lst[-1]  
 
>>> print lst[-2]

はシャーディング操作をサポートし、次のことができます。 1 つのアクセス 間隔内の要素はさまざまなステップ サイズをサポートし、シャーディングはデータの挿入とコピー操作に使用できます。

nums = [1,2,3,4,5]  
print nums[0:3]  #[1, 2, 3] #前三个元素  
  
print nums[3:]   #[4, 5]    #后两个元素  
  
print nums[-3:]  #[3, 4, 5] #后三个元素 不支持nums[-3:0]  
  
numsclone = nums[:]    
  
print numsclone    #[1, 2, 3, 4, 5]  复制操作  
  
print nums[0:4:2]   #[1, 3]    步长为2  
  
nums[3:3] = ["three","four"]   #[1, 2, 3, &#39;three&#39;, &#39;four&#39;, 4, 5]  在3和4之间插入  
  
nums[3:5] = []    #[1, 2, 3, 4, 5] 将第4和第5个元素替换为[] 即删除["three","four"]  
支持加法和乘法操作
lst1 = ["hello","world"]  
lst2 = [&#39;good&#39;,&#39;time&#39;]  
print lst1+lst2  #[&#39;hello&#39;, &#39;world&#39;, &#39;good&#39;, &#39;time&#39;]  
  
print lst1*5  #[&#39;hello&#39;, &#39;world&#39;, &#39;hello&#39;, &#39;world&#39;, &#39;hello&#39;, &#39;world&#39;, &#39;hello&#39;, &#39;world&#39;, &#39;hello&#39;, &#39;world&#39;]

リストでサポートされているメソッド。次のメソッドを使用して、 list:

>>> [x for x in dir([]) if not x.startswith("__")]  
[&#39;append&#39;, &#39;count&#39;, &#39;extend&#39;, &#39;index&#39;, &#39;insert&#39;, &#39;pop&#39;, &#39;remove&#39;, &#39;reverse&#39;, &#39;sort&#39;]  
def compare(x,y):  
    return 1 if x>y else -1  
  
  
#【append】  在列表末尾插入元素  
lst = [1,2,3,4,5]  
lst.append(6)   
print lst     #[1, 2, 3, 4, 5, 6]  
lst.append("hello")  
print lst     #[1, 2, 3, 4, 5, 6]  
  
#【pop】  删除一个元素,并返回此元素的值 支持索引 默认为最后一个  
x = lst.pop()  
print x,lst     #hello [1, 2, 3, 4, 5, 6]  #默认删除最后一个元素  
x = lst.pop(0)  
print x,lst     #1 [2, 3, 4, 5, 6]  删除第一个元素  
  
#【count】  返回一个元素出现的次数  
print lst.count(2)    #1     
  
#【extend】  扩展列表  此方法与“+”操作的不同在于此方法改变原有列表,而“+”操作会产生一个新列表  
lstextend = ["hello","world"]  
lst.extend(lstextend)  
print lst           #[2, 3, 4, 5, 6, &#39;hello&#39;, &#39;world&#39;]  在lst的基础上扩展了lstextend进来   
  
#【index】  返回某个值第一次出现的索引位置,如果未找到会抛出异常  
print lst.index("hello")  #5      
  
#print lst.index("kitty") #ValueError: &#39;kitty&#39; is not in list  出现异常  
  
  
#【remove】 移除列表中的某个元素,如果待移除的项不存在,会抛出异常  无返回值  
lst.remove("hello")  
print lst     #[2, 3, 4, 5, 6, &#39;world&#39;]  "hello" 被移除  
  
#lst.remove("kitty")         #ValueError: list.remove(x): x not in list  
  
#【reverse】  意为反转 没错 就是将列表元素倒序排列,无返回值  
print lst        #[2, 3, 4, 5, 6, &#39;world&#39;]  
lst.reverse()   
print lst        #[2, 3, 4, 5, 6, &#39;world&#39;]  
  
  
#【sort】 排序  
print lst    #由于上面的反转 目前排序为 [&#39;world&#39;, 6, 5, 4, 3, 2]  
lst.sort()    
print lst    #排序后  [2, 3, 4, 5, 6, &#39;world&#39;]  
  
nums = [10,5,4,2,3]  
print nums     #[10,5,4,2,3]  
nums.sort(compare)  
print nums     #[2, 3, 4, 5, 10]

リストをイテレータに変換します。

いわゆるイテレータは、next メソッドを持つオブジェクトです (このメソッドは呼び出し時にパラメータを必要としません)。次のメソッドが呼び出されると、反復子は次の値を返します。次のメソッドが呼び出されたが、反復子に返す値がない場合は、StopIteration 例外が発生します。リストに対するイテレータの利点は、イテレータを使用するとリストを一度にメモリに追加する必要がなく、リストのデータに順番にアクセスできることです。

イテレータのパブリック メソッドを表示するには、引き続き上記のメソッドを使用します:

lst = [1,2,3,4,5]  
lstiter = iter(lst)  
print [x for x in dir(numiter) if not x.startswith("__")]  
>>>[&#39;next&#39;]

はい、次のメソッドは 1 つだけです。イテレータの場合は、これを行うことができます:

lst = [1,2,3,4,5]  
lstiter = iter(lst)  
  
for i in range(len(lst)):  
    print lstiter.next()  #依次打印  
    1  
    2  
    3  
    4  
    5

タプル型

タプル型もリストと同様にシーケンスであり、リストとは異なり、タプル型を変更することはできません。タプルの宣言は次のとおりです。

lst = (0,1,2,2,2)  
lst1=("hello",)  
lst2 = ("hello")  
print type(lst1)    #<type &#39;tuple&#39;>  只有一个元素的情况下后面要加逗号 否则就是str类型  
print type(lst2)    #<type &#39;str&#39;>

辞書型

辞書型は、Dictionary6c3c0e4ab25bd75a295015325220c902 と同様、キーと値のペアのコレクションです。またはjsのjsonオブジェクト。初期化方法は次のとおりです。

dict1 = {}  
print type(dict1)      #<type &#39;dict&#39;>  声明一个空字典  
  
dict2 = {"name":"kitty","age":18}   #直接声明字典类型  
  
dict3 = dict([("name","kitty"),("age",18)])  #利用dict函数将列表转换成字典  
  
dict4 = dict(name=&#39;kitty&#39;,age=18)           #利用dict函数通过关键字参数转换为字典  
  
dict5 = {}.fromkeys(["name","age"])      #利用fromkeys函数将key值列表生成字典,对应的值为None   {&#39;age&#39;: None, &#39;name&#39;: None}  
字典基本的操作方法:
#【添加元素】    
dict1 = {}  
dict1["mykey"] = "hello world"     #直接给一个不存在的键值对赋值 即时添加新元素  
  
dict1[(&#39;my&#39;,&#39;key&#39;)] = "this key is a tuple"   #字典的键可以是任何一中不可变类型,例如数字、字符串、元组等  
  
#【键值对个数】  
print len(dict1)  
  
#【检查是否含有键】  
print "mykey" in dict1         #True  检查是否含有键为mykey的键值对  
print "hello" in dict1         #False  
  
#【删除】  
del dict1["mykey"]           #删除键为mykey的键值对

继续利用上面的方法查看字典的所有公共方法:

>>> [x for x in dir({}) if not x.startswith("__")]  
[&#39;clear&#39;, &#39;copy&#39;, &#39;fromkeys&#39;, &#39;get&#39;, &#39;has_key&#39;, &#39;items&#39;, &#39;iteritems&#39;, &#39;iterkeys&#39;, &#39;itervalues&#39;,  
 &#39;keys&#39;, &#39;pop&#39;, &#39;popitem&#39;, &#39;setdefault&#39;, &#39;update&#39;, &#39;values&#39;, &#39;viewitems&#39;, &#39;viewkeys&#39;, &#39;viewvalues&#39;]  
dict.clear()                          删除字典中所有元素  
  
dict.copy()                          返回字典(浅复制)的一个副本  
  
dict.get(key,default=None)     对字典dict 中的键key,返回它对应的值value,如果字典中不存在此键,则返回default 的值(注意,参数default 的默认值为None)  
  
dict.has_key(key)                 如果键(key)在字典中存在,返回True,否则返回False. 在Python2.2版本引入in 和not in 后,此方法几乎已废弃不用了,但仍提供一个 可工作的接口。  
  
dict.items()                         返回一个包含字典中(键, 值)对元组的列表  
  
dict.keys()                          返回一个包含字典中键的列表  
  
dict.values()                        返回一个包含字典中所有值的列表  
  
dict.iter()                            方法iteritems(), iterkeys(), itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代器,而不是一个列表。  
  
dict.pop(key[, default])         和方法get()相似,如果字典中key 键存在,删除并返回dict[key],如果key 键不存在,且没有给出default 的值,引发KeyError 异常。  
  
dict.setdefault(key,default=None)  和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。  
  
dict.setdefault(key,default=None)   和方法set()相似,如果字典中不存在key 键,由dict[key]=default 为它赋值。

布尔类型

布尔类型即True和False,和其它语言中的布尔类型基本一致。下面列出典型的布尔值

print bool(0)   #False  
print bool(1)   #True  
print bool(-1)  #True  
  
print bool([])  #False  
print bool(())  #False  
print bool({})  #False  
print bool(&#39;&#39;)  #False  
print bool(None) #False

推荐教程:《python教程

以上がPythonのデータ型とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。