Huawei マシン テストの質問: HJ92 文字列内の最長の連続数字文字列を検索する (python)

(1) タイトルの説明

ここに画像の説明を挿入

(2) Python3 の実装

while True:
    try:
        str1 = input()
        max_len, max_str, cur_len, cur_str = 0, [], 0, ''
        for i, v in enumerate(str1):
            if v.isnumeric():
                cur_len += 1
                cur_str += v
                if cur_len > max_len:
                    max_len = cur_len
                    max_str = [cur_str]
                elif cur_len == max_len:
                    max_str.append(cur_str)
            else:
                cur_len = 0
                cur_str = ""
        print("".join(max_str) + "," + str(max_len))
    except:
        break
       

(3) 知識ポイントの詳細説明

1. input(): コンソールの入力を (任意の形式で) 取得します。出力はすべて文字列型です。

str1 = input()
print(str1)
print('提示语句:', str1)
print(type(str1))

'''
asd123!#
提示语句: asd123!#
<class 'str'>
'''
一般的に使用される強制転送タイプ 例証する
int(input()) 強制的に整数にする (入力は整数でなければならない)
list(input()) リストへの強制 (入力は任意の型にすることができます)

1.1. input() と list(input()) の違いと相互変換方法

  • 同点: どちらのメソッドも for ループの反復を実行して文字を抽出でき、どちらも抽出後の文字列型です。
  • 違い:str = list(input())入力文字列をリスト型に変換し、関連する操作を実行できます。好き: str.append()
  • リストを文字列に変換:str_list = ['A', 'aA', 2.0, '', 1]
  • 方法 1:print(''.join(str))
  • 方法 2:print(''.join(map(str, str_list)))

述べる:リストに数値が含まれている場合、直接文字列に変換することはできませんそうでない場合、システムはエラーを報告します。

  • 方法 1:print(''.join([str(ii) for ii in str_list]))
  • 方法 2: print(''.join(map(str, str_list)))
    map(): 指定された関数に従って、指定されたシーケンスをマップします。つまり、入力関数をシーケンスの各要素に順番に適用し、新しいシーケンスを返します。

(1) 例: リストに数字が含まれている場合、直接文字列に変換することはできません。そうしないと、システムはエラーを報告します。

str = ['25', 'd', 19, 10]
print(' '.join(str))

'''
Traceback (most recent call last):
 File "C:/Users/Administrator/Desktop/test.py", line 188, in <module>
   print(' '.join(str))
TypeError: sequence item 3: expected str instance, int found
'''

(2) 例: リストに数値が含まれている場合、リスト内のすべての要素を文字列に変換します。

str_list = ['A', 'aA', 2.0, '', 1]
print(''.join(str(ii) for ii in str_list))
print(''.join([str(ii) for ii in str_list]))
print(''.join(map(str, str_list))) 		# map():根据给定函数对指定序列进行映射。即把传入函数依次作用到序列的每一个元素,并返回新的序列。

'''
AaA2.01
AaA2.01
AaA2.01
'''

2. print(): 出力を印刷します。

【Python】print()関数の使い方

x, y = 1, 9
print('{},{}' .format(x, y))	# 打印方法一
print('*'*10)					# 打印分割符
print(x, ',', y)				# 打印方法二

'''
1,9
**********
1 , 9
'''

3. リストの共通操作 (15+9 関数) —— リストは順序付けられた変数シーケンスです。

一般に、順序付けられたシーケンス型は、インデックス作成、スライス、加算、乗算、およびメンバー操作をサポートします。

  • 不変データ型:布尔类型(bool)、整型(int)、字符串(str)、元组(tuple)
  • 可変データ型:列表(list)、集合(set)、字典(dict)
シリアルナンバー 関数 例証する
0 list1 = [] 空のリストを作成する
0 list1 = list() 空のリストを作成する
1 list2 = [元素] リストを作成します。入力パラメータは任意の型にすることができます
1 list2 = list(元素) リストを作成します。入力パラメータは任意の型にすることができます
—— —— ——
2 list[index] インデックス (負の数はフラッシュバックを示します)
3 list[start, end] スライス (指定範囲の要素を取得)
4 list[::-1] 逆順で出力 (ステップサイズは 1)
—— —— ——
5 list.append(元素) リストの最後に任意のタイプの要素を追加します
6 list.extend(元素) 反復可能なシーケンスを追加
7 list.insert(index, 元素) 指定した位置に要素を挿入する
—— —— ——
8 list.remove(元素) 指定された要素を削除します。(1) 同一の要素が複数ある場合、最初の要素のみ削除されます。(2) 存在しない場合、システムはエラーを報告します。
9 list.pop(index) 指定された位置の要素を削除します。デフォルトでは、最後のアイテムが削除されます。
10 del list(index) 指定位置の要素を削除する
11 list.clear() 内容をクリアし、空のリストを返す
—— —— ——
12 list.index(元素) インデックス要素の位置。(1) 同一要素が複数ある場合は、最初の要素の位置のみを返します。(2) 存在しない場合、システムはエラーを報告します。
13 list.count(元素) 指定された要素の出現回数を数える
14 list.reverse() 逆順に出力する
15 list.sort(*, key=None, reverse=False) (1) デフォルトでは小さいものから大きいものへと並べます。(2) reverse=True は大きいものから小さいものへのソートを意味します。
—— —— ——
(1) len(list) 要素数
(2) type(list) ビューのデータ型
(3) max(list) 最大値を返します (ネストされたシーケンスを持つことはできません)
(4) min(list) 最小値を返します (ネストされたシーケンスを持つことはできません)
(5) list(tuple) タプルをリストに変換
(6) list1 + list2 + 演算子 (連結)
(7) list * 3 * 演算子 (繰り返し)
(8) 元素 in list (in / not in) メンバーシップ演算子 (指定された値がシーケンス内にあるかどうかを決定します)
(9) for i in list: トラバース

4. String str(): パラメータを文字列型に変換します (強制変換) - 文字列は順序付けられた不変シーケンスです。

関数の説明:str(x, base=10)
一般的に、順序付けられたシーケンス型はインデックス作成、スライス、加算、乗算、メンバー操作をサポート

print('返回空字符串:', str())
print('整数转换为字符串:', str(-23))
print('浮点数转换为字符串:', str(1.3e2))

print('返回空字符串:', type(str()))
print('整数转换为字符串:', type(str(-23)))
print('浮点数转换为字符串:', type(str(1.3e2)))

print('列表转换为字符串:', str([12, '-23.1', 'Python']))
print('元组转换为字符串:', str((23, '9we', -8.5)))
print('字典转换为字符串:', str({
    
    'Huawei': 'China', 'Apple': 'USA'}))
print('集合转换为字符串:', str({
    
    'China', 'Japan', 'UK'}))

'''
返回空字符串: 
整数转换为字符串: -23
浮点数转换为字符串: 130.0

返回空字符串: <class 'str'>
整数转换为字符串: <class 'str'>
浮点数转换为字符串: <class 'str'>

列表转换为字符串: [12, '-23.1', 'Python']
元组转换为字符串: (23, '9we', -8.5)
字典转换为字符串: {'Huawei': 'China', 'Apple': 'USA'}
集合转换为字符串: {'China', 'UK', 'Japan'}
'''

5. str.join(): シーケンス内の要素 (文字列、タプル、リスト、辞書) を指定された文字で接続し、新しい文字列を返します。

関数の説明:'Separator'.join(Sequence)
関数の説明: Separator を区切り文字として使用して、Sequence のすべての要素を 1 つずつ分割し、新しい文字列を返します。
入力パラメータ:

  • Separator: 区切り文字を表します。単一の文字 (例:''、','、'.'、'-'、'*'など) または文字列 (例: 'abc') を指定できます。
  • Sequence: 接続する要素の順序を表します。文字列、タプル、リスト、辞書を指定できます。
    注意 1:SeparatorどちらSequenceも string 型のみで、int 型や float 型は使用できません。そうしないと、システムがエラーを報告します。
    備考 2: 辞書の読みはランダムです。
a1 = 'I Love China !'
print('字符串: ', ' '.join(a1))

a11 = 'I Love China !'
print('字符串: ', ''.join(a11))

a2 = ['I', 'Love', 'China', '!']
print('列表: ', ' '.join(a2))

a3 = ('I', 'Love', 'China', '!')
print('元祖: ', ' '.join(a3))

a4 = {
    
    'I': 1, 'Love': 2, 'China': 3, '!': 4}
print('字典: ', ' '.join(a4))

'''
字符串:  I   L o v e   C h i n a   !
字符串:  I Love China !
列表:  I Love China !
元祖:  I Love China !
字典:  I Love China !
'''
import os     	# 导入路径模块
os.getcwd()   	# 获取当前路径
data_save = os.path.join(os.getcwd(), 'data_save')  # 获取当前路径并组合新的路径
print(data_save)

6. str.isdigit()、str.isnumeric()、str.isdecimal(): 文字列に 10 進数のみが含まれているかどうかを確認し、ブール値を返します。

漢字と英数字の Unicode エンコード範囲

方法 ユニコード番号 全角数字(全角) ローマ数字 漢字と数字 バイト番号(半角) 浮動小数点数 負の数 科学表記法 バイナリ 8 進数 16進数
isdecimal() 真実 真実 間違い 間違い エラー 間違い 間違い 間違い 間違い 間違い 間違い
isdigit() 真実 真実 間違い 間違い 真実 間違い 間違い 間違い 間違い 間違い 間違い
isnumeric() 真実 真実 真実 真実 エラー 間違い 間違い 間違い 間違い 間違い 間違い
str = '123'
print(str.isdecimal())  	
print(str.isdigit())  	
print(str.isnumeric())  

'''
True
True
True
'''

7. 列挙関数 - enumerate(): 反復可能なオブジェクトを入力し、オブジェクトのインデックスと値を同時に取得します。for ループで使用されます。

関数の説明:index, value = enumerate(iteration, start)
入力パラメーター:

  • iteration: 反復可能なオブジェクト。
  • start: カスタムの開始インデックス値、オプションのパラメーター、デフォルトは 0 です。
    述べる:開始点を指定すると、反復可能なオブジェクトの各要素に対応するインデックスのみが変更されます。つまり、開始点が指定されているかどうかに関係なく、反復可能なオブジェクトは最初の要素から読み取られます。

出力パラメータ:

  • index: インデックス値。
  • value: 反復可能なオブジェクトのインデックスに対応する要素値。
    特徴 1: 無名関数、つまり名前のない関数。
list1 = [1,2,3,4,5,6]
for index, value in enumerate(list1):			# 默认起始点
    print(indx, value)
########################################
print('*'*10)
########################################
for indx, value in enumerate(list1, 2):			# 指定起始点
    print(indx, value)

"""
0 1
1 2
2 3
**********
5 1
6 2
7 3
"""

おすすめ

転載: blog.csdn.net/shinuone/article/details/129392246