关于Python字典的两道题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于Python字典的两道题目相关的知识,希望对你有一定的参考价值。

如何从键盘输入数据建立字典?而不是代码中直接写入?我用input输入数据总是出错,请问是什么原因,还有就是第5题怎么写代码,给些思路,求教各位大神们!
2.7的版本

dd = dict()
while True:
    key = input("存入的键:")
    value = input("存入的值:")
    dd[key] = value
    flag = input("是否继续存入[y/Y/N/n]:")
    if flag in ['n','N']:
        break

keys = list(dd.keys())
values = list(dd.values())
print(keys)
print(values)

我的是3版本,自己改改,输入错误看看是不是数据类型问题

第五题:

letter = dict()
strs = input("输入一串字符串:")

for i in strs:
    letter.setdefault(i,0)
    letter[i] += 1

keys = list(letter.keys())
keys.sort()
for i in keys:    
    print(i,letter[i])

参考技术A 2.7建议用 raw_input ,这个函数返回的总是字符串,你自己根据情况判断是否需要对字符串再做进一步处理,比如转换成其他类型等。因为你也没具体说出什么错,只能帮到这里了。

第五题的提示已经很明显了,*用字典*。 你可以以每个字母做为字典的 key,对应的值则是这个字母的出现次数 (通过循环,每次处理字符串中的一个字母,以字母为key去++字典)。
参考技术B #4题
m = 
while True:
    s = raw_input("please input the key=value:")
    if '=' not in s:
        break
    k, v = s.split('=')
    m[k] = v
print m
#python2中通过raw_input获取输入值。

#5题
from collections import Counter
s = 'asdfsdlkjlewjfklf'
print dict(Counter(s))


如果解决了您的问题请采纳!

如果未解决请继续追问

参考技术C

第五题:

>>> inStr = raw_input("Please INput")
Please INput123456abcabc
>>>counts = 
>>>for i in inStr:
counts[i] = counts.get(i, 0) + 1
>>>counts
'a': 2, 'c': 2, 'b': 2, '1': 1, '3': 1, '2': 1, '5': 1, '4': 1, '6': 1

分治3:关于山脉数组的两道题

在LeetCode中有两道关于山脉的问题LeetCode852和1095。通过这两个题,我可以放心的和你说,LeetCode刷完前1000道就够了,后面1500道基本不用看。

1.LeetCode852. 山脉数组的峰顶索引

这个题的内容表述有点啰嗦,

符合下列属性的数组 arr 称为 山脉数组 :
arr.length >= 3
存在 i(0 < i < arr.length - 1)使得:

  •      arr[0] < arr[1] < ... arr[i-1] < arr[i]
  • arr[i] > arr[i+1] > ... > arr[arr.length - 1]

给你由整数组成的山脉数组 arr ,返回任何满足 arr[0] < arr[1] < ... arr[i - 1] < arr[i] > arr[i + 1] > ... > arr[arr.length - 1] 的下标 i 。

分析

这里的意思其实就是说在数组中的某位位置i开始,从0到i是递增的,从i+1 到数组最后是递减的,让你找到这个最高点。

这个题其实就是前面找最小值的相关过程而已,使用二分法轻松搞定。

记满足题目要求的下标 i为 ans ,我们可以发现:

  • 当i<ans时,arr[i]<arr[i+1]
  • 当i>=ans时,arr[i]>=arr[i+1]

实现过程就是:

class Solution {
    public int peakIndexInMountainArray(int[] arr) {
        int n = arr.length;
        int left = 1, right = n - 2, ans = 0;
        while (left <= right) {
            int mid = (left + right) / 2;
            if (arr[mid] > arr[mid + 1]) {
                ans = mid;
                right = mid - 1;
            } else {
                left = mid + 1;
            }
        }
        return ans;
    }
}

2.LeetCode1095. 山脉数组中查找目标值

要求就是在上面的基础上:

给你一个 山脉数组 mountainArr,请你返回能够使得 mountainArr.get(index) 等于 target 最小 的下标 index 值。

如果不存在这样的下标 index,就请返回 -1。

示例1:
输入:array = [1,2,3,4,5,3,1], target = 3
输出:2
解释:3 在数组中出现了两次,下标分别为 2 和 5,我们返回最小的下标 2。

做了上面的题,这个题的解答就三句话:

  1. 先使用二分法找到数组的峰值。
  2. 在峰值左边使用二分法寻找目标值。
  3. 如果峰值左边没有目标值,那么使用二分法在峰值右边寻找目标值。代码就是
    class Solution {
        public int findInMountainArray(int target, MountainArray mountainArr) {
            int l = 0, r = mountainArr.length() - 1;
            while (l < r) {
                int mid = (l + r) / 2;
                if (mountainArr.get(mid) < mountainArr.get(mid + 1)) {
                    l = mid + 1;
                } else {
                    r = mid;
                }
            }
            int peak = l;
            int index = binarySearch(mountainArr, target, 0, peak, true);
            if (index != -1) {
                return index;
            }
            return binarySearch(mountainArr, target, peak + 1, mountainArr.length() - 1, false);
        }
    
        public int binarySearch(MountainArray mountainArr, int target, int l, int r, boolean flag) {
            if (!flag) {
                target *= -1;
            }
            while (l <= r) {
                int mid = (l + r) / 2;
                int cur = mountainArr.get(mid) * (flag ? 1 : -1);
                if (cur == target) {
                    return mid;
                } else if (cur < target) {
                    l = mid + 1;
                } else {
                    r = mid - 1;
                }
            }
            return -1;
        }
    }

​ 

以上是关于关于Python字典的两道题目的主要内容,如果未能解决你的问题,请参考以下文章

python中字典循环的两种方式

判断python字典中key是否存在的两种方法

判断python字典中key是否存在的两种方法

python创建字典的两种方法

python——反转字典的两种方法(字典的key和value对换)

关于python中字典