一、思路:

输入:数字列表number,目标值target

判断条件:数字列表中两个不同数字相加等于target

输出:符合条件的两个数字的下标,下标顺序排列

方法1:

def list(number, target):
a = []
number0 = []
for i in number:
number1.append(i)
number1 = set(number)- set(number0) ##number2是元组,存储所有不在number1中并且不重复的数

     for j in number1:
        if i+j == target:
 a = [number.index(i), number.index(j)]
 print(a)
 return
number = [1, 3, 4, 3, 2, 9]
target = 6
list(number, target)

方法2:把方法1中内层循环遍历的可迭代序列(number1)的生成简化了一下,更简洁

def list(number, target):
a = []
for i in number:
number1 = [x for x in number if x != i] ##number1中不包含i
for j in number1:
if i+j == target:
a = [number.index(i), number.index(j)]
a.sort()
print(a)
return
list([1, 3, 4, 3, 2, 9], 6)

二、扩展一:

可以看到上面执行时输入的列表中是存在重复值的,那如果题目中没有要求是不同数字相加,要怎么实现呢?

def list(number, target):
a = []
number1 = number.copy()
for i in number:
number1.remove(i)
for j in number1: ##number1中是number中所有不等于i的数字
if i+j == target:
if i == j: ##由于number.index(i)只能取到第一个下标,所以当两个相加的数字相等时,可以用内置函数enumerate()来获取列表元素的索引和值
a = [x for x, y in enumerate(number) if y == i][:2] ##因为只需要输出任意两个符合条件的元素下标,这里取前两个
else:
a = [number.index(i), number.index(j)]
a.sort()
print(a)
          return
number = [1, 3, 4, 3, 2, 9]
target = 6
list(number, target)
 

因为这里只要找到两个数字相加等于目标值就行,对数字在列表中的顺序并没有要求,所以我们还可以先对重复数字进行处理,如果重复数字n,2n等于目标值,那么直接输出;2n不等于目标值再看列表中其他的数字

def list(number, target):
a = []
if len(number) != len(set(number)):
number1 = filter(lambda x: number.count(x) > 1, number)
if target % 2 == 0:
for i in number1:
if 2 * i == target:
a = [x for x, y in enumerate(number) if y == i][:2]
a.sort()
print(a)
return
number2 = number.copy()
for i in number:
number2.remove(i)
for j in number2:
if i !=j and i + j == target:
a = [number.index(i), number.index(j)]
a.sort()
print(a)
return
number = [1, 3, 4, 3, 7, 9]
target = 8
list(number, target)

三、 扩展二:

这里题目限制了只需要任意两个相加符合条件的数字,如果是需要输出所有符合两个数字相加等于目标值的组合又怎么来实现呢?

def list(number, target):
a = []
number1 = number.copy()
for x, y in enumerate(number):
number1.remove(y)
for m, n in enumerate(number1, x+1): ##这里number1中删除了数字y,enumerate()生成对象的时候,制定下标从y在number中的下标加一开始
if y + n == target:
a.append((x, m))
a.sort()
print(a) number = [1, 2, 3, 4, 2, 3, 4]
target = 5
list(number, target)

数字列表number,目标值target,找到number中两个不同数字之和等于target的数字,输出下标并顺序排列 ----笔试题记录扩展的更多相关文章

  1. leetcode-1 Two Sum 找到数组中两数字和为指定和

     问题描写叙述:在一个数组(无序)中高速找出两个数字,使得两个数字之和等于一个给定的值.如果数组中肯定存在至少一组满足要求. <剑指Offer>P214(有序数组) <编程之美& ...

  2. LeetCode 18 4Sum (4个数字之和等于target)

    题目链接 https://leetcode.com/problems/4sum/?tab=Description 找到数组中满足 a+b+c+d=0的所有组合,要求不重复. Basic idea is ...

  3. 求数组中两数之和等于target的两个数的下标

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  4. Java 找到数组中两个元素相加等于指定数的所有组合

    思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum - val 在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增 ...

  5. 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。

    谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...

  6. leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)

    136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...

  7. 动手写个数字输入框1:input[type=number]的遗憾

    前言  最近在用Polymer封装纯数字的输入框,开发过程中发现不少坑,也有很多值得研究的地方.本系列打算分4篇来叙述这段可歌可泣的踩坑经历: <动手写个数字输入框1:input[type=nu ...

  8. 《剑指offer》-找到数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为 ...

  9. [LeetCode] 448. Find All Numbers Disappeared in an Array 找到数组中消失的数字

    题目描述 给定n个数字的数组,里面的值都是1-n,但是有的出现了两遍,因此有的没有出现,求没有出现值这个数组中的值有哪些. 要求不能用额外的空间(除了返回列表之外),时间复杂度n 思路 因为不能用额外 ...

  10. ExtJS学习-----------Ext.Number,ExtJS对javascript中的Number的扩展

    关于ExtJS对javascript中的Number的扩展,能够參考其帮助文档,文档下载地址:http://download.csdn.net/detail/z1137730824/7748893 以 ...

随机推荐

  1. Referenced file contains errors (http://mybatis.org/dtd/mybatis-3-config.dtd). For more information, right click on the message in the Problems View and select "Show Details..."

    mybatis配置文件报错Referenced file contains errors mybatis的配置文件报错 The errors below were detected when vali ...

  2. 数电第11周周结_by_yc

    Lab7_时序逻辑验证 一.简易电子时钟 功能描述:   设计一简易电子时钟,支持时.分.秒显示,其中HEX7-HEX6显示时,HEX5-HEX4显示分,HEX1-HEX0显示秒,假设进制为:18秒= ...

  3. WEB入门——信息搜集1-20

    WEB1--查看源码 查看源码即可得flag. WEB2--JS前端禁用 查看源码即可得flag. JavaScript实现禁用的方法简单来说就是当用户使用键盘执行某一命令是返回的一种状态,而这种状态 ...

  4. Shell及Linux常见易错题目题库-Shell/Linux-选择、简答、判断、编程

    1.以下不合法的shell头是(不合法指运行会报错)(   ) A. #!/bin/bash B. #-/bin/bash C. !#/bin/bash 答案:C 2.if [ $2 -a $2 = ...

  5. 【Java EE】Day14 Servlet、HTTP、Request

    一.Servlet 二.HTTP 三.Request 四.登录案例

  6. 可视化编排的数据集成和分发开源框架Nifi轻松入门-上

    @ 目录 概述 定义 dataflow面临挑战 特性 核心概念 架构 高级概述 安装 部署 常见处理器 入门示例 概述 定义 Nifi 官网地址 https://nifi.apache.org/ Ni ...

  7. HelloGitHub 最受欢迎的开源项目 Top10(2022年)

    再见 2022,你好 2023! HelloGitHub 也随着 2023 年的到来,更新到了第 81 期 开始迈向第 7 个年头啦. 在过去的 2022 年,我们一共发布了 12 期月刊.分享了 5 ...

  8. .NET6使用NLog向文件、数据库写数据

    1.Nuget 引入 NLog NLog.Web.AspNetCore NLog.Database(写入数据库使用) 2.创建nlog.config 注意数据库连接字符串需要配置TrustServer ...

  9. C++初探索

    C++初探索 前言 C++ 和 C 的区别主要在8个方面: 输入和输出 引用 inline函数 函数默认值 函数重载 模板函数 new 和 delete namespace 我仅对印象不深的地方做了总 ...

  10. 「Python实用秘技12」像导入模块一样导入ipynb文件

    本文完整示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/PythonPracticalSkills 这是我的系列文章「Python实用秘技」的第12 ...