<jupyter_start><jupyter_text>Chapter2: 制御とデータ構造1. 制御2. 標準的なデータ構造    1. 文字列    2. リスト    3. 辞書3. 練習問題  2-1. 制御 ループ```pythonN = 10  繰り返す回数for i in range(N):     繰り返す処理while 条件:     条件が成立するときの処理``` 条件分岐```pythonif 条件1:     条件1が成立しているときの処理elif 条件2:     条件1が成立せず，条件2が成立するときの処理else:     条件1も条件2も成立しないときの処理```  2-2. 標準的なデータ構造 2-2-1. 文字列<jupyter_code>s = 'Hello'
print(s[1]) # indexを指定して，表示する
print(len(s)) # 文字列sの長さを表示する
print(s+' world') # 文字列を連結する
s + 1.5 # 文字列と数値の和をとることはできない
s + str(1.5) # キャストすることで連結ができる
print(s.upper()) # すべて大文字にする
print(s.lower()) # すべて小文字にする
print(s[1:]) # 部分文字列
text = """I never think of the future. 
It comes soon enough."""
# このように文字列を定義すると複数行でも扱える
print(text)
print(text.split(' '))# スペースで分割する<jupyter_output>['I', 'never', 'think', 'of', 'the', 'future.', '\nIt', 'comes', 'soon', 'enough.']<jupyter_text>2-2-2. リスト<jupyter_code>countries = ['USA', 'UK', 'Japan']
for i in range(3):
    print(countries[i]) # indexを指定して値を表示

for country in countries:
    print(country) # リストの要素を引き出すことができる
print(len(countries)) # リストの長さ
if 'USA' in countries: # 'USA'がcountriesの中にある場合
    print('OK') 
else:
    print('NG')<jupyter_output>3
OK<jupyter_text>リストのメソッド- append- sort- remove<jupyter_code>countries = ['USA', 'UK', 'Japan']
countries.append('China') # リストに追加
print(countries)
print(countries.index('UK')) # indexを求める
print(countries[1:-1]) # 部分リストを表示

countries.sort() # 辞書順にソート
print(countries)

countries.remove('UK') # リストにある値を消去
print(countries)<jupyter_output>['USA', 'UK', 'Japan', 'China']
1
['UK', 'Japan']
['China', 'Japan', 'UK', 'USA']
['China', 'Japan', 'USA']<jupyter_text>内包表現```pythonarray = [i for i in range(N)]  0からN-1までのリストを作る```<jupyter_code>array = [i for i in range(10)]
print("0から9までのリスト: ", array)

odd_array = [x for x in array if x%2 != 0]
print("奇数のリスト: ", odd_array)<jupyter_output>0から9までのリスト:  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
奇数のリスト:  [1, 3, 5, 7, 9]<jupyter_text>注意点: 参照渡しと値渡しリストの値が渡されるのではなく，参照が渡される．   コピーする時は気をつけてコピーする必要がある．  参考資料: [Pythonでリストの深いコピー](http://eibiisii.hateblo.jp/entry/2014/07/09/235438)<jupyter_code>b = countries # 参照をコピーする
b.pop() # bにのみ変更を加える
print(b)
print(countries) # countriesにも影響がある
a = countries[:] # 参照ではなく，値をコピーする
a.pop() # aにのみ変更を加える
print(a)
print(countries)
# 深いコピーの例
import copy
obj = [{'a': 10}]
deepcopied = copy.deepcopy(obj)
print('obj   :', id(obj[0]))
print('copied:', id(deepcopied[0]))<jupyter_output>obj   : 4536566472
copied: 4536551816<jupyter_text>2-2-3. 辞書Pythonにおける連想配列を「辞書」と呼ぶ．  keyとvalueをペアにして保存するデータ構造である．<jupyter_code>d = {}
d['a'] = 'art' # dict[key] = value という形で辞書に追加
d['b'] = 'beam'
d['c'] = 'circuit'
print(d)
print(d.get('a')) # dからkeyが'a'となるものを取り出す
print(d['a']) # dからkeyが'a'となるものを取り出す(2)
print(d.keys()) # keyのリスト
print(d.values()) # valueのリスト
for key, value in d.items():
    print(key + ':' + value)
del d['b'] # keyが'b'となるエントリを消す
print(d)<jupyter_output>{'a': 'art', 'c': 'circuit'}
{'fraction_non_alphanumeric': 0.19004837595024188, 'fraction_numerical': 0.0359364201796821, 'mean_word_length': 5.827830188679245, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 19, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '166596', 'license': 'MIT', 'n_tokens_mistral': 1720, 'n_tokens_neox': 1643, 'n_words': 242, 'path': 'text/Chapter2.ipynb', 'repo_name': 'Kuni88/tutorial_python', 'size': '2894'}