【问题标题】:use of the while loop in this condition在这种情况下使用 while 循环
【发布时间】:2021-04-21 12:02:49
【问题描述】:

我得到的数据看起来像这样(如下),我想使用 python 逐行编写一个 while 循环,只要第一列中的单词没有改变脚本,就检查第三列,如果第三列的值是最小值,则返回第三列的值和同一行的第二列的值。

ZYG11B  0000  1
ZYG11B 0100 2
ZYG11B  0001 3
ZYG11A 0001000000000000 1
ZYG11A  0011000000000000 2
ZYG11A  0000000000000000 3
ZYG11A  0011000001000000 4
ZYG11A  0001000100000000 5
ZYG11A  0011000001000100 6
ZYG11A  0001000001000000 7
ZYG11A  0001000001000100 8
ZYG11A 0000000100000000 9
ZYG11A  0011010000000000 10
ZYG11A  0001010000000000 11
ZYG11A  0011000000010000 12
ZYG11A  0000000000000001 13
ZYG11A  0001000000000001 14
ZYG11A  0000010000000000 15
ZYG11A  0001000000010000 16
ZYG11A  0000110000000000 17
ZYG11A  0101000000000000 18
ZYG11A  0100000000000000 19
ZYG11A  0011010001000000 20
ZYG11A  0011000011000000 21
ZYG11A  0011110000000000 22
ZYG11A  0011010001000100 23
ZYG11A  0011000011001100 24
ZYG11A  0011000011000100 25
ZYG11A  0001000101000100 26
ZYG11A  0001000000000100 27
ZYG11A  0000110000000001 28
ZYG11A  0000001100000000 29

【问题讨论】:

  • 请分享您的开发以及我们可以在哪里帮助您改进它!这不是“我想要代码做X”意义上的编码服务网站,我们将免费提供。
  • oki 所以代码的主要问题是如何告诉 python 在单词不变的情况下继续前进,其余的我可以处理
  • 不要使用script 标签。它根本不提供任何信息。所有 SO 问题都以一种或另一种方式与脚本有关。不比加programcode更好

标签: python while-loop


【解决方案1】:
  1. 您可以轻松地将第三列值写入变量 A,并在每次迭代时将新值写入新变量 B 并进行比较。
  2. 这些列是用 csv、列表还是字符串形式编写的?

【讨论】:

  • 它们是用 CSV 编写的,但这里问题的主要思想是第一列上的 while 循环,而第一列中的单词没有改变,然后继续向其余代码我已经知道该怎么做了
【解决方案2】:

如果下面的 Python 2.7 代码不能解决你的问题,它至少应该给你一个起点:

def ret_fields(file1):
    prev_category = ''
    min_field = 0
    ret_list = []
    line = file1.readline()
    while (line):
        [category,zero_one,field] = line.split()
        if (prev_category == ''):
            prev_category = category
            min_field = field

        if (category != prev_category):
            min_field = field

        if (int(field) <= int(min_field)):
            ret_list.append([category,zero_one,field])
            min_field = field
        
        prev_category = category
        line = file1.readline()
    
    return ret_list


f = open("fields.txt")
try:
    l = ret_fields(f)
    for i in l:
       print i

finally:
    f.close()

用“fields.txt”文件如下:

ZYG11B  0000  1
ZYG11B 0100 2
ZYG11B  0001 3
ZYG11B  1000  0
ZYG11A 0001000000000000 1
ZYG11A  0011000000000000 2
ZYG11A  0000000000000000 3
ZYG11A  0011000001000000 4
ZYG11A  0001000100000000 5
ZYG11A  0011000001000100 6
ZYG11A  0001000001000000 7
ZYG11A  0001000001000100 8
ZYG11A 0000000100000000 9
ZYG11A  0011010000000000 10
ZYG11A  0001010000000000 11
ZYG11A  0011000000010000 12
ZYG11A  0000000000000001 13
ZYG11A  0001000000000001 14
ZYG11A  0000010000000000 15
ZYG11A  0001000000010000 16
ZYG11A  0000110000000000 17
ZYG11A  0000110000000000 -1
ZYG11A  0101000000000000 18
ZYG11A  0100000000000000 19
ZYG11A  0011010001000000 20
ZYG11A  0011000011000000 21
ZYG11A  0011110000000000 22
ZYG11A  0011010001000100 23
ZYG11A  0011000011001100 24
ZYG11A  0011000011000100 25
ZYG11A  0001000101000100 26
ZYG11A  0001000000000100 27
ZYG11A  0000110000000001 28
ZYG11A  0000001100000000 29
ZYG11A 1001000000000000 0

输出是:

$ python min_fields.py 
['ZYG11B', '0000', '1']
['ZYG11B', '1000', '0']
['ZYG11A', '0001000000000000', '1']
['ZYG11A', '0000110000000000', '-1']
$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多