简体   繁体   English

Python:string.replace(“ \\ n”,“”)在函数内部和外部的行为如何?

[英]Python: How does string.replace(“\n”, “ ”) behave in- and outside a function?

The aim of my code is to put the string datastr into the two-dimensional list matrix . 我的代码的目的是将字符串datastr放入二维列表matrix This works perfectly in Code_v1 but when I put the same code into a function datastr = datastr.replace("\\n", " ") doesn't replace the \\n the same way it did in Code_v1 (form one " " to several " " ´s; compare Output_v1 to Output_v2). 这在Code_v1中完美地工作,但是当我将相同的代码放入函数中时datastr = datastr.replace("\\n", " ")不能像在Code_v1中一样替换\\n (从一个" "到多个" " ;将Output_v1与Output_v2进行比较)。

Why is that the case and how can I fix it? 为什么会这样,我该如何解决?

I already read through numerous other questions regarding .replace(old, new) but they all wrote string.replace(old, new) instead of string = string.replace(old, new) . 我已经阅读了有关.replace(old, new)许多其他问题.replace(old, new)但是他们都写了string.replace(old, new)而不是string = string.replace(old, new)

Thank you in advance for your answers. 预先感谢您的回答。

PS I don't want to use matrix for math. PS我不想使用matrix进行数学运算。 That is why I use a two-dimensional list and not numpy.matrix . 这就是为什么我使用二维列表而不使用numpy.matrix

PPS This is my first questions. PPS这是我的第一个问题。 If one has any suggestion how to improve the readability of the question or any kind of improvements for my coding, please tell me. 如果有人对如何提高问题的可读性或对我的编码有任何改进的建议,请告诉我。

Code_v1: Code_v1:

datastr = """08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48"""

datastr = datastr.replace("\n", " ")  # Remove all \n from the string
print(datastr)

datalist = datastr.split(" ")  # Split the string into a new element by " " for the list datalist

matrix = [[1 for y in range(20)] for x in range(20)]  # create 20x20 "matrix"

print(datalist)

for y in range(20):  # Write data into the "matrix" as integer
    for x in range(20):
        matrix[x][y] = int(datalist[y * 20 + x])

Output_v1: Output_v1:

C:\Users\i7\AppData\Local\Programs\Python\Python35-32\pythonw.exe C:/Users/i7/Dropbox/Programmieren/Python/test.py
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91 22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80 24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50 32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70 67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21 24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72 21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95 78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92 16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57 86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58 19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40 04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66 88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69 04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36 20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16 20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54 01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
['08', '02', '22', '97', '38', '15', '00', '40', '00', '75', '04', '05', '07', '78', '52', '12', '50', '77', '91', '08', '49', '49', '99', '40', '17', '81', '18', '57', '60', '87', '17', '40', '98', '43', '69', '48', '04', '56', '62', '00', '81', '49', '31', '73', '55', '79', '14', '29', '93', '71', '40', '67', '53', '88', '30', '03', '49', '13', '36', '65', '52', '70', '95', '23', '04', '60', '11', '42', '69', '24', '68', '56', '01', '32', '56', '71', '37', '02', '36', '91', '22', '31', '16', '71', '51', '67', '63', '89', '41', '92', '36', '54', '22', '40', '40', '28', '66', '33', '13', '80', '24', '47', '32', '60', '99', '03', '45', '02', '44', '75', '33', '53', '78', '36', '84', '20', '35', '17', '12', '50', '32', '98', '81', '28', '64', '23', '67', '10', '26', '38', '40', '67', '59', '54', '70', '66', '18', '38', '64', '70', '67', '26', '20', '68', '02', '62', '12', '20', '95', '63', '94', '39', '63', '08', '40', '91', '66', '49', '94', '21', '24', '55', '58', '05', '66', '73', '99', '26', '97', '17', '78', '78', '96', '83', '14', '88', '34', '89', '63', '72', '21', '36', '23', '09', '75', '00', '76', '44', '20', '45', '35', '14', '00', '61', '33', '97', '34', '31', '33', '95', '78', '17', '53', '28', '22', '75', '31', '67', '15', '94', '03', '80', '04', '62', '16', '14', '09', '53', '56', '92', '16', '39', '05', '42', '96', '35', '31', '47', '55', '58', '88', '24', '00', '17', '54', '24', '36', '29', '85', '57', '86', '56', '00', '48', '35', '71', '89', '07', '05', '44', '44', '37', '44', '60', '21', '58', '51', '54', '17', '58', '19', '80', '81', '68', '05', '94', '47', '69', '28', '73', '92', '13', '86', '52', '17', '77', '04', '89', '55', '40', '04', '52', '08', '83', '97', '35', '99', '16', '07', '97', '57', '32', '16', '26', '26', '79', '33', '27', '98', '66', '88', '36', '68', '87', '57', '62', '20', '72', '03', '46', '33', '67', '46', '55', '12', '32', '63', '93', '53', '69', '04', '42', '16', '73', '38', '25', '39', '11', '24', '94', '72', '18', '08', '46', '29', '32', '40', '62', '76', '36', '20', '69', '36', '41', '72', '30', '23', '88', '34', '62', '99', '69', '82', '67', '59', '85', '74', '04', '36', '16', '20', '73', '35', '29', '78', '31', '90', '01', '74', '31', '49', '71', '48', '86', '81', '16', '23', '57', '05', '54', '01', '70', '54', '71', '83', '51', '54', '69', '16', '92', '33', '48', '61', '43', '52', '01', '89', '19', '67', '48']

Process finished with exit code 0

Code_v2: Code_v2:

#globals
matrix = 0
matrix_data = 0


def create_matrix():

    global matrix
    global matrix_data

    datastr = """08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
    49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
    81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
    52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
    22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
    24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
    32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
    67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
    24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
    21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
    78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
    16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
    86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
    19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
    04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
    88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
    04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
    20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
    20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
    01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48"""

    datastr = datastr.replace("\n", " ")  # Remove all \n from the string
    print(datastr)

    datalist = datastr.split(" ")  # Split the string into a new element by " " for the list datalist

    matrix = [[1 for y in range(20)] for x in range(20)]  # create 20x20 "matrix"

    matrix_data = [[1 for y in range(20)] for x in range(20)]

    print(datalist)

    for y in range(20):  # Write data into the "matrix" as integer
        for x in range(20):
            matrix[x][y] = int(datalist[y * 20 + x])


create_matrix()

Output_v2: Output_v2:

C:\Users\i7\AppData\Local\Programs\Python\Python35-32\pythonw.exe C:/Users/i7/Dropbox/Programmieren/Python/test.py
Traceback (most recent call last):
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08     49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00     81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65     52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91     22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80     24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50     32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70     67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21     24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72     21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95     78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92     16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57     86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58     19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40     04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66     88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69     04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36     20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16     20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54     01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
  File "C:/Users/i7/Dropbox/Programmieren/Python/test.py", line 51, in <module>
    create_matrix()
  File "C:/Users/i7/Dropbox/Programmieren/Python/test.py", line 46, in create_matrix
matrix[x][y] = int(datalist[y * 20 + x])
ValueError: invalid literal for int() with base 10: ''
['08', '02', '22', '97', '38', '15', '00', '40', '00', '75', '04', '05', '07', '78', '52', '12', '50', '77', '91', '08', '', '', '', '', '49', '49', '99', '40', '17', '81', '18', '57', '60', '87', '17', '40', '98', '43', '69', '48', '04', '56', '62', '00', '', '', '', '', '81', '49', '31', '73', '55', '79', '14', '29', '93', '71', '40', '67', '53', '88', '30', '03', '49', '13', '36', '65', '', '', '', '', '52', '70', '95', '23', '04', '60', '11', '42', '69', '24', '68', '56', '01', '32', '56', '71', '37', '02', '36', '91', '', '', '', '', '22', '31', '16', '71', '51', '67', '63', '89', '41', '92', '36', '54', '22', '40', '40', '28', '66', '33', '13', '80', '', '', '', '', '24', '47', '32', '60', '99', '03', '45', '02', '44', '75', '33', '53', '78', '36', '84', '20', '35', '17', '12', '50', '', '', '', '', '32', '98', '81', '28', '64', '23', '67', '10', '26', '38', '40', '67', '59', '54', '70', '66', '18', '38', '64', '70', '', '', '', '', '67', '26', '20', '68', '02', '62', '12', '20', '95', '63', '94', '39', '63', '08', '40', '91', '66', '49', '94', '21', '', '', '', '', '24', '55', '58', '05', '66', '73', '99', '26', '97', '17', '78', '78', '96', '83', '14', '88', '34', '89', '63', '72', '', '', '', '', '21', '36', '23', '09', '75', '00', '76', '44', '20', '45', '35', '14', '00', '61', '33', '97', '34', '31', '33', '95', '', '', '', '', '78', '17', '53', '28', '22', '75', '31', '67', '15', '94', '03', '80', '04', '62', '16', '14', '09', '53', '56', '92', '', '', '', '', '16', '39', '05', '42', '96', '35', '31', '47', '55', '58', '88', '24', '00', '17', '54', '24', '36', '29', '85', '57', '', '', '', '', '86', '56', '00', '48', '35', '71', '89', '07', '05', '44', '44', '37', '44', '60', '21', '58', '51', '54', '17', '58', '', '', '', '', '19', '80', '81', '68', '05', '94', '47', '69', '28', '73', '92', '13', '86', '52', '17', '77', '04', '89', '55', '40', '', '', '', '', '04', '52', '08', '83', '97', '35', '99', '16', '07', '97', '57', '32', '16', '26', '26', '79', '33', '27', '98', '66', '', '', '', '', '88', '36', '68', '87', '57', '62', '20', '72', '03', '46', '33', '67', '46', '55', '12', '32', '63', '93', '53', '69', '', '', '', '', '04', '42', '16', '73', '38', '25', '39', '11', '24', '94', '72', '18', '08', '46', '29', '32', '40', '62', '76', '36', '', '', '', '', '20', '69', '36', '41', '72', '30', '23', '88', '34', '62', '99', '69', '82', '67', '59', '85', '74', '04', '36', '16', '', '', '', '', '20', '73', '35', '29', '78', '31', '90', '01', '74', '31', '49', '71', '48', '86', '81', '16', '23', '57', '05', '54', '', '', '', '', '01', '70', '54', '71', '83', '51', '54', '69', '16', '92', '33', '48', '61', '43', '52', '01', '89', '19', '67', '48']

Process finished with exit code 1

You indented the lines of datastr . 缩进datastr的行。 Those spaces at the start of each line are significant : 每行开头的空格很重要

    datastr = """08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
    49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
    81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 ... """
# ^^ spaces here.

As a result each line (except for the first), starts with 4 extra spaces. 结果,每行(第一行除外)都以4个额外的空格开头。 Your \\n newlines are replaced just fine, but those extra spaces are still in place. 您的\\n换行符可以很好地替换,但是那些多余的空格仍然存在。

Split your string with str.split() with no arguments and you won't need to replace newlines with spaces either: 使用不带参数的 str.split()分割字符串,并且不需要用空格替换换行符:

datalist = datastr.split()

str.split() with no arguments (or None as the first argument) splits on arbitrary width whitespace, including newlines. 不带参数(或第一个参数为None str.split()在任意宽度的空格(包括换行符)上分割。 It doesn't matter if there is one or multiple whitespace characters in-between. 中间是否有一个或多个空格字符都没关系。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM