如何解决是否可以在整个元组中搜索条目而不进行迭代?
我的程序需要搜索包含月份数字和值的列表。 (一月是1,二月是2,依此类推...)。 如果找到月份整数,我想将其对应的值附加到avg_tuple数组。如果找不到月份整数,我希望它将“ N / A”附加到output_tuple数组以进行报告。是否可以不使用以下内容搜索我的列表: {对于my_list中的我:} 方法?
例如,我的程序的目的是取1月所有值的平均值。然后报告。然后取二月和一月的平均值并报告。然后是三月,二月和一月(依此类推,随着月份的继续……)。如果该列表没有一个月的价值,我希望它报告不适用。我尝试了{if my_list中的x}方法,但没有成功。
这是我的代码:
my_list = [(2,181),(2,183),(3,376),(4,205)]
input tuple = my_list
#Function to calculate and report back the average duration for each month
def average_duration(input_tuple):
output_tuple = []
average_tuple = []
for number in range(1,13):
for i in input_tuple:
if i[1] == number:
average_tuple.append(i[3])
if len(average_tuple)==0:
output_tuple.append("N/A")
pass
else:
output_tuple.append((sum(average_tuple))/len(average_tuple))
return output_tuple
这是我当前的输出。每个值是每个月。 (我正在使用OpenPyxl在电子表格中报告它们):
my_list N/A 182 246.6666667 236.25 236.25 236.25 236.25 236.25 236.25 236.25 236.25 236.25
这是我预期的输出:
my_list N/A,182,246.6666667,236.25,N/A,N/A
解决方法
您可以尝试利用字典来一次跟踪所有月份,因此您不必反复浏览它:
env:
global:
- NODE_VERSION=10
- ADB_INSTALL_TIMEOUT=8
- ANDROID_HOME=/usr/local/android-sdk
- ANDROID_SDK_ROOT=/usr/local/android-sdk
- TOOLS=${ANDROID_HOME}/tools
- PATH=${ANDROID_HOME}:${ANDROID_HOME}/emulator:${TOOLS}:${TOOLS}/bin:${ANDROID_HOME}/platform-tools:${PATH}
stages:
- name: e2e_android
jobs:
include:
- stage: e2e_android
language: android
cache: npm
android:
components:
- tools
- platform-tools
- tools
- build-tools-28.0.3
- android-28
- extra-google-m2repository
- extra-android-m2repository
- sys-img-x86-android-28
licenses:
- 'android-sdk-license-.+'
- 'android-sdk-preview-license-.+'
- 'google-gdk-license-.+'
before_install:
- yes | sdkmanager "build-tools;28.0.3" >/dev/null 2>&1
- yes | sdkmanager "platforms;android-28" >/dev/null 2>&1
install:
- wget https://raw.githubusercontent.com/creationix/nvm/v0.31.0/nvm.sh -O ~/.nvm/nvm.sh
- source ~/.nvm/nvm.sh
- nvm install $NODE_VERSION
- nvm use $NODE_VERSION
- nvm alias default $NODE_VERSION
- npm install -g react-native-cli >/dev/null 2>&1
- npm install -g detox-cli >/dev/null 2>&1
- npm install >/dev/null 2>&1
before_script:
- echo no | android create avd --force -n test -t android-28 --abi default/x86
- emulator -avd test -no-audio -no-window &
# - android-wait-for-emulator
- adb shell input keyevent 82 &
script:
- echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
- detox build -c android.emu.ci
- detox test -c android.emu.ci -n test -H --cleanup
结果:
from collections import defaultdict
my_list = [(2,181),(2,183),(3,376),(4,205)]
input_tuple = my_list
#Function to calculate and report back the average duration for each month
def average_duration(input_tuple):
months = defaultdict(list)
output_tuple = []
for month,value in input_tuple:
months[month].append(value)
overall_report = []
for month in range(12):
report = months[month + 1]
if not report:
output_tuple.append("N/A")
else:
overall_report.extend(report)
output_tuple.append(sum(overall_report)/len(overall_report))
return output_tuple
print(average_duration(input_tuple))
从复杂性的角度来看,这实际上是可以达到的最高效率。您修改以显示的代码的复杂度为['N/A',182.0,246.66666666666666,236.25,'N/A','N/A']
,而复杂度为O(12 * n)
。一个效率没有比另一个效率低得多,但是如果不遍历整个数组就无法找到这些平均值,因此您只能使用O(12 + N)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。