RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1595164
Accepted
Elina Vasilyeva
Elina Vasilyeva
Asked:2024-09-29 03:27:07 +0000 UTC2024-09-29 03:27:07 +0000 UTC 2024-09-29 03:27:07 +0000 UTC

第三个字符不显示

  • 772

任务如下:

在输入处,输入一串字母,接下来我们输入一个数字,该数字将指示将在字符串中搜索其变体的序列的长度。

您需要以列表的形式显示所有选项。例如,如果我们输入AFGTYAFTGAF,然后输入数字2,那么我们将需要输入遇到的所有唯一选项而不重复,更准确地说:AF, FG, GT, GY等等。

我有以下代码:

seq = input().upper()

k_mer = int(input())

list = []

n = 0

for i in seq:

    seq = seq[n:len(seq)]
    k = seq[0:k_mer]
    if k not in list and k != '':
        list.append(k)
    n += 1

print(list)

我首先检查了这个号码1,但它不再起作用了。

因此,例如,当输入 时AGTC,由于某种原因,代码看不到Т数字的第三个字母,但如果该行扩展到AGTCAGTC,只有这样它才会最后输出。

此外,您只需要使用最简单的函数,例如append, find, for。

python
  • 3 3 个回答
  • 65 Views

3 个回答

  • Voted
  1. Best Answer
    Stanislav Volodarskiy
    2024-09-29T15:11:17Z2024-09-29T15:11:17Z

    添加调试打印:

    ...
        seq = seq[n:len(seq)]
        print('seq', seq, 'n', n)  # отладка
        k = seq[0:k_mer]
    ...
    
    $ echo -e 'AGTC\n1' | python temp.py
    seq 'AGTC' n 0
    seq 'GTC' n 1
    seq 'C' n 2
    seq '' n 3
    ['A', 'G', 'C']
    
    $ echo -e '112123123412345123456\n1' | python temp.py
    seq '112123123412345123456' n 0
    seq '12123123412345123456' n 1
    seq '123123412345123456' n 2
    seq '123412345123456' n 3
    seq '12345123456' n 4
    seq '123456' n 5
    seq '' n 6
    seq '' n 7
    seq '' n 8
    seq '' n 9
    seq '' n 10
    seq '' n 11
    seq '' n 12
    seq '' n 13
    seq '' n 14
    seq '' n 15
    seq '' n 16
    seq '' n 17
    seq '' n 18
    seq '' n 19
    seq '' n 20
    ['1']
    

    第二个示例显示了问题:第一个字符从字符串中取出(一切正常),然后是两个(这意味着丢失了一个),然后是三个(丢失了两个)。很快线路结束并且循环空闲,但这不再重要了。您需要一次咬掉一个字符,并在循环结束时执行此操作:

    ...
    for i in seq:
    
        print('seq', repr(seq), 'n', n)  # отладка
        k = seq[0:k_mer]
        if k not in list and k != '':
            list.append(k)
        n += 1
        seq = seq[1:len(seq)]  # один символ долой
    ...
    
    $ echo -e 'AGTC\n1' | python temp.py
    seq 'AGTC' n 0
    seq 'GTC' n 1
    seq 'TC' n 2
    seq 'C' n 3
    ['A', 'G', 'T', 'C']
    
    $ echo -e '112123123412345123456\n1' | python temp.py
    seq '112123123412345123456' n 0
    seq '12123123412345123456' n 1
    seq '2123123412345123456' n 2
    seq '123123412345123456' n 3
    seq '23123412345123456' n 4
    seq '3123412345123456' n 5
    seq '123412345123456' n 6
    seq '23412345123456' n 7
    seq '3412345123456' n 8
    seq '412345123456' n 9
    seq '12345123456' n 10
    seq '2345123456' n 11
    seq '345123456' n 12
    seq '45123456' n 13
    seq '5123456' n 14
    seq '123456' n 15
    seq '23456' n 16
    seq '3456' n 17
    seq '456' n 18
    seq '56' n 19
    seq '6' n 20
    ['1', '2', '3', '4', '5', '6']
    

    这样就好多了。只是慢慢地。不需要改变线,你可以从中剪出合适的碎片:

    ...
    for i in range(len(seq) - k_mer + 1):
    
        k = seq[i:i + k_mer]
        if k not in list and k != '':
            list.append(k)
        n += 1
    ...
    

    它变得更快,但k not in list在长列表上仍然会变慢。替换成set,代码会变得更快更简单:

    seq = input().upper()
    k_mer = int(input())
    s = set()
    for i in range(len(seq) - k_mer + 1):
        s.add(seq[i:i + k_mer])
    lst = list(s)
    print(lst)
    
    $ echo -e 'AFGTYAFTGAF\n1' | python temp.py
    ['A', 'G', 'Y', 'T', 'F']
    
    $ echo -e 'AFGTYAFTGAF\n2' | py temp.py
    ['TY', 'YA', 'GA', 'GT', 'TG', 'FT', 'FG', 'AF']
    
    • 1
  2. SerhiiKrepets
    2024-09-29T03:51:36Z2024-09-29T03:51:36Z

    当您使用 缩短循环内的字符串时seq = seq[n:len(seq)],该字符串会不断缩短:

    seq = input().upper()
    k_mer = int(input())
    
    unique_kmers = []
    
    for n in range(len(seq) - k_mer + 1):
        k = seq[n:n + k_mer]  
        if k not in unique_kmers:  
            unique_kmers.append(k)
    
    print(unique_kmers)
    
    • 0
  3. Fox Fox
    2024-09-29T05:46:26Z2024-09-29T05:46:26Z

    准备好控制台脚本(保存到文件 test.py 并运行):

    import os
    
    print("-" * 70 + "\nСписок уникальных комбинаций заданной длины из букв заданной строки:\n" + "-" * 70)
    
    # Функция обработки строки:
    def unique_substrings(v_string, v_n):
    
     ok = True
    
     if not v_string: print("Не указана строка!"); ok = False
    
     if ok:
      try: v_string = v_string.strip()
      except Exception as e: print(f"Недопустимое содержимое строки! Подробнее:\n{e}"); ok = False
    
     if ok:
      try: v_n = abs(int(v_n))
      except Exception as e: print(f"Недопустимое значение длины подстрок! Подробнее:\n{e}"); ok = False
    
     if ok and (v_n <= 0 or v_n > len(v_string)): print("Недопустимое значение длины подстрок!"); ok = False
    
     if ok:
      set_substrings = set()
      for i in range(len(v_string) - v_n + 1): set_substrings.add(v_string[i: i + v_n])
      print(f"\nСписок уникальных комбинаций букв по {v_n}:\n", list(set_substrings))
    
    # Пример использования:
    v_string = "AFGTYAFTGAF"
    v_n = 4
    unique_substrings(v_string, v_n)
    
    print("\nНажмите любую клавишу для продолжения...")
    os.system("pause > nul" if os.name == "nt" else "read > /dev/null")
    

    结果:

    Список уникальных комбинаций букв по 4:
     ['FGTY', 'AFGT', 'FTGA', 'TYAF', 'TGAF', 'GTYA', 'YAFT', 'AFTG']
    
    • -2

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5