假洒脱~ 2021-07-19 09:14 采纳率: 0%
浏览 52

关于for循环的请教

在提取数据中需要将长字符串分割为列表,并保持列表长度不变。我一开始想的方法是在for循环中,先用split函数将每个字符串分割为列表,然后利用append函数添加到新列表中,但是由于对for循环的逻辑顺序不太清楚,最后得到的结果有些出入。
需要处理的数据为:

data_4=
[['        26           1.3000000      8.49156100E+05             0             0          100.000000\n',
  '        27           1.3500000      8.81815950E+05             8             8           92.000000\n',
  '        28           1.4000000      9.14475800E+05            16            24           76.000000\n',
  '        29           1.4500000      9.47135650E+05            76           100             .000000\n'],
 ['        24           1.2000000      7.83836400E+05             0             0          100.000000\n',
  '        25           1.2500000      8.16496250E+05             5             5           95.000000\n',
  '        26           1.3000000      8.49156100E+05            26            31           69.000000\n',
  '        27           1.3500000      8.81815950E+05            66            97            3.000000\n',
  '        28           1.4000000      9.14475800E+05             3           100             .000000\n'],
 ['        23           1.1500000      7.51176550E+05             0             0          100.000000\n',
  '        24           1.2000000      7.83836400E+05             2             2           98.000000\n',
  '        25           1.2500000      8.16496250E+05             7             9           91.000000\n',
  '        26           1.3000000      8.49156100E+05            13            22           78.000000\n',
  '        27           1.3500000      8.81815950E+05            17            39           61.000000\n',
  '        28           1.4000000      9.14475800E+05            19            58           42.000000\n',
  '        29           1.4500000      9.47135650E+05            23            81           19.000000\n',
  '        30           1.5000000      9.79795500E+05            19           100             .000000\n']]

最后需要的数据格式如下:

[[['26', '1.3000000', '8.49156100E+05', '0', '0', '100.000000\n'],
  ['27', '1.3500000', '8.81815950E+05', '8', '8', '92.000000\n'],
  ['28', '1.4000000', '9.14475800E+05', '16', '24', '76.000000\n'],
  ['29', '1.4500000', '9.47135650E+05', '76', '100', '.000000\n']],
 [['24', '1.2000000', '7.83836400E+05', '0', '0', '100.000000\n'],
  ['25', '1.2500000', '8.16496250E+05', '5', '5', '95.000000\n'],
  ['26', '1.3000000', '8.49156100E+05', '26', '31', '69.000000\n'],
  ['27', '1.3500000', '8.81815950E+05', '66', '97', '3.000000\n'],
  ['28', '1.4000000', '9.14475800E+05', '3', '100', '.000000\n']],
 [['23', '1.1500000', '7.51176550E+05', '0', '0', '100.000000\n'],
  ['24', '1.2000000', '7.83836400E+05', '2', '2', '98.000000\n'],
  ['25', '1.2500000', '8.16496250E+05', '7', '9', '91.000000\n'],
  ['26', '1.3000000', '8.49156100E+05', '13', '22', '78.000000\n'],
  ['27', '1.3500000', '8.81815950E+05', '17', '39', '61.000000\n'],
  ['28', '1.4000000', '9.14475800E+05', '19', '58', '42.000000\n'],
  ['29', '1.4500000', '9.47135650E+05', '23', '81', '19.000000\n'],
  ['30', '1.5000000', '9.79795500E+05', '19', '100', '.000000\n']]]

现在想的代码如下:

for i in range(0,len(data_4)):  
     for j in range(0,len(data_4[i])):               ##假设为A命令
         data_5.append(data_4[i][j].split(' '))
     data_6.append(data_5)                         ##假设为B命令

我理想的逻辑顺序是:在i=0是,j依次在(0,4)中取值,执行4次A命令,然后会执行1次B命令。但实际结果跟预想结果差很多,貌似是执行17次A命令,才执行1次B命令,然后用重复上述过程3次,导致得到的数据长度虽然是3,但是每个子列表的长度都是17,这跟原始数据不一致。所以请教下,如何用for循环解决这个问题。其他办法的话,已经有朋友指导了,但是我还是想弄清楚for循环的逻辑和中止这个事情……

  • 写回答

3条回答 默认 最新

  • CSDN专家-HGJ 2021-07-19 13:52
    关注

    造成数据结果与想要的结果不一致是因为在split中用的分割符是一个空格,造成在分割时多出许多空格。你写的代码逻辑没有问题。另外你可以在运行时用print语句看一下循环变量的变化情况,第一个for循环3次,第二个循环是再根据子列表的长度分别循环4,5,8次,并将第二循环的结果添加到列表中,data_6共添加3次。只需这样稍微改动一下就能得到和想要的结果一致。

    data_5=[]
    data_6=[]
    for i in range(0, len(data_4)):
        #print(len(data_4[i]))
        for j in range(0, len(data_4[i])):  # 假设为A命令
            data_5.append([x.strip() for x in data_4[i][j].split()])
        data_6.append(data_5)  # 假设为B命令
        #print(data_6)
    print(data_6)
    
    评论

报告相同问题?

问题事件

  • 创建了问题 7月19日

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?