【问题标题】:Redundant for loop output循环输出冗余
【发布时间】:2018-08-09 21:21:51
【问题描述】:

我试图将一个长的 typedef(C) 分成它的单词,然后打印每行的第二个单词

variable = """int32_t  adc_cal_A;             / Simple point slope   calculation adjustment needed for the ADC */ \r\n
          int32_t  adc_cal_B;                 /* y = Ax + B */"""
list = variable.splitlines()

for line in list:
    wordlist =  line.split()

    for line in wordlist:
       output = wordlist[1][:-1]
       print output

它成功打印了我的测试列表中每一行的第二个单词,但它多次重复该单词。结果如下:

adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_A
adc_cal_B
adc_cal_B
adc_cal_B
adc_cal_B
adc_cal_B
adc_cal_B
adc_cal_B
adc_cal_B
adc_cal_B

Process finished with exit code 0

任何人都知道为什么会这样。有没有简单的解决办法?

【问题讨论】:

  • 不要使用list,它是关键字
  • 您正在迭代wordlist,但每次都打印变量名。您最终会在每一行中为 每个单词 打印变量名称。
  • 听起来很傻,但要理解上面的注释,只需在代码末尾插入 break。
  • @IgorRaush 的建议是去掉for line in wordlist: 这一行。有趣的是它在问题的标题中 - “冗余 for 循环”

标签: python string list for-loop


【解决方案1】:

这里有一个简单的方法来实现你正在寻找的东西:

variable = """int32_t  adc_cal_A;                 / Simple point slope   calculation adjustment needed for the ADC */ \r\n
          int32_t  adc_cal_B;                 /* y = Ax + B */"""

for num_line, line in enumerate(variable.splitlines()):
    try:
        print(f"line={num_line} token={line.split()[1]}")
    except Exception as e:
        # Probably line is empty?
        pass

输出:

line=0 token=adc_cal_A;
line=2 token=adc_cal_B;

如果您只想要第二个令牌而不需要其他好东西,请使用print(line.split()[1]),即:

adc_cal_A;
adc_cal_B;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    相关资源
    最近更新 更多